In your original message you indicated that you were able to print to the printer; with a report that had no parameters. Your code is correct there; you assign the PrinterName property and then call the PrintToPrinter method. If there are parameters you need to pass and/or database connection information you need to set for your report to print, you simply must set those properties before you call the PrintToPrinter method. All of these methods and properties are within the ReportDocument object. So the code would be something like the following: public class Form1 : System.Windows.Forms.Form { ReportDocument m_PrintJob; public Form1() { try { m_PrintJob = new ReportDocument(); m_PrintJob.Load("C:/MyReport.rpt"); if (m_PrintJob.IsLoaded) { SetConnectionInfo("MyDBServer", "MyDBName", "MyUserName", "MyPassword"); SetParameterValue("ParameterName", 100); m_PrintJob.PrintToPrinter(1, false, 0, 0); } } catch (Exception e) { MessageBox.Show(e.Message); } } public void SetConnectionInfo(string szServer, string szDatabase, string szUser, string szPassword) { TableLogOnInfo crtableLogoninfo = new TableLogOnInfo(); Tables CrTables = m_PrintJob.Database.Tables; for (int iIndex = 0; iIndex < CrTables.Count; iIndex++) { crtableLogoninfo.ConnectionInfo.ServerName = szServer; crtableLogoninfo.ConnectionInfo.DatabaseName = szDatabase; crtableLogoninfo.ConnectionInfo.UserID = szUser; crtableLogoninfo.ConnectionInfo.Password = szPassword; Table CrTable = CrTables[iIndex]; CrTable.ApplyLogOnInfo(crtableLogoninfo); } } public void SetParameterValue(string szParamName, int iValue) { ParameterFieldDefinitions paramFlds = m_PrintJob.DataDefinition.ParameterFields; ParameterFieldDefinition paramFld = paramFlds[szParamName]; ParameterDiscreteValue discreteValue = new ParameterDiscreteValue(); ParameterValues paramValues = paramFld.CurrentValues; paramValues.Clear(); discreteValue.Value = iValue; paramValues.Add(discreteValue); paramFld.ApplyCurrentValues(paramValues); } } Ron Ward