如何在C#中将数据从对象填充到数据表?

时间:2016-02-29 08:59:05

标签: c#

我是.net代码的新手。我可以理解代码,但感觉很难做出改变。我正在调用方法" threading"并传递一个对象参数。我想填充该对象中的数据以填充数据表。但是,我在那时得到了一个错误。我正在粘贴下面的所有代码,请做必要的帮助。 以下是我收到的错误消息: "对象不是ADODB.RecordSet或ADODB.Record。\ r \ n参数名称:adodb" 和错误是在步骤oleDA1.Fill(dt1,don);

public class Report

   {
        public string ScheduleId;
        public string reportName;
        public string Frequency;
        public string Customer;
        public string Code;
        public string ReportPath;
        public string ReportId;
        public string ReportFormat;
        public string StartDate;
        public string EndDate;

    }

public List<Report> Populatereport(object SSISreport)

    {
        List<Report> list = new List<Report>();
        Report al = null;

        bool fireAgain = true;

        using (OleDbDataAdapter oleDA = new OleDbDataAdapter())
        using (DataTable dt = new DataTable())
        {

               oleDA.Fill(dt, SSISreport);
                foreach (DataRow _row in dt.Rows)
                {
                    al = new Report();

                    al.reportName = _row["ReportName"].ToString();
                    al.ScheduleId = _row["ScheduleId"].ToString();
                    al.Frequency = _row["Frequency"].ToString();
                    al.Customer = _row["Customer"].ToString();
                    al.Code = _row["code"].ToString();
                    al.ReportId = _row["ReportId"].ToString();
                    al.ReportFormat = _row["ReportFormat"].ToString();
                    al.ReportPath = _row["ReportPath"].ToString();
                    al.StartDate = _row["StartDate"].ToString();
                    al.EndDate = _row["EndDate"].ToString();
                    list.Add(al);
                }
        }

        return list;
    }

 private object threading(object don)
    {

        Report aa = new Report();
        DataRow row1;
        ReportEnv env = null;           

        using (OleDbDataAdapter oleDA1 = new OleDbDataAdapter())
        using (DataTable dt1 = new DataTable())
        {

            oleDA1.Fill(dt1, don);--err0r at this point

            row1 = dt1.Rows[0];


            aa.reportName = row1["ReportName"].ToString();
            aa.ScheduleId = row1["ScheduleId"].ToString();
            aa.Frequency = row1["Frequency"].ToString();
            aa.Customer = row1["Customer"].ToString();
            aa.ColcoCode = row1["code"].ToString();
            aa.ReportId = row1["ReportId"].ToString();
            aa.ReportFormat = row1["ReportFormat"].ToString();
            aa.ReportPath = row1["ReportPath"].ToString();
            aa.StartDate = row1["StartDate"].ToString();
            aa.EndDate = row1["EndDate"].ToString();

        }
        ParameterValue[] paramval = new ParameterValue[5];

        paramval[0] = new ParameterValue();
        paramval[0].Name = "Startdate";
        paramval[0].Value = aa.StartDate;
        paramval[1] = new ParameterValue();
        paramval[1].Name = "Enddate";
        paramval[1].Value = aa.EndDate;
        paramval[2] = new ParameterValue();
        paramval[2].Name = "ReportID";
        paramval[2].Value = aa.ReportId;
        paramval[3] = new ParameterValue();
        paramval[3].Name = "Code";
        paramval[3].Value = aa.Code;
        paramval[4] = new ParameterValue();
        paramval[4].Name = "Frequency";
        paramval[4].Value = aa.Frequency;

        ReportExecutionService rs = new ReportExecutionService();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
        rs.Url = "some url";
        rs.LoadReport(aa.ReportPath, null);
        rs.SetExecutionParameters(paramval, "en-GB");

        String filename = env.Code + "_" + aa.reportName + DateTime.UtcNow.ToString("_dd-MM-yyyy_hh-mm-ss.fff") + "." + aa.ReportFormat;

        //Render the report and generate pdf
        Byte[] results;
        string encoding = String.Empty;
        string mimeType = String.Empty;
        string extension = String.Empty;
        Warning[] warnings = null;
        string[] streamIDs = null;
        string deviceInfo = null;
        results = rs.Render(aa.ReportFormat, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);


        using (FileStream stream = File.OpenWrite(path+ filename))
        {

            stream.Write(results, 0, results.Length);

        }

     return null;
    }

 public void Main()
    {

        List<Report> aq = new List<Report>();
        aq = Populatereport(Dts.Variables["vnSource_SQL_Result"].Value);

        for (int i = 0; i < aq.Count; i++)
        {

                threading(aq[i]);

                         }   
              }        

1 个答案:

答案 0 :(得分:0)

检查你的Report类,我想它应该根据msdn:https://msdn.microsoft.com/en-us/library/5s322715(v=vs.110).aspx

转换为Recordset或Record