簡體   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