繁体   English   中英

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

[英]How to fill data from object to data table in C#?

我是.net代码的新手。 我可以理解代码,但是感觉很难进行更改。 我称该方法为“线程化”并传递一个对象参数。 我想在该对象中填充数据以填充数据表。 但是,那时候我遇到了错误。 我要粘贴下面的所有代码,请提供必要的帮助。 下面是我收到的错误消息:“对象不是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]);

                         }   
              }        

检查您的Report类,我猜它应该根据msdn强制转换为Recordset或Record: https ://msdn.microsoft.com/zh-cn/library/5s322715( v= vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM