程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#中存儲過程填充DataTable

C#中存儲過程填充DataTable

編輯:C#基礎知識
C#中存儲過程和DataTable的應用

     存儲過程p_OperatorDetails,有四個參數@sDatetime,@eDatetime,@operatorNo,@transdesc。其中@operatorNo和@transdesc為兩個可選參數,通過這四個參數如何從存儲過程裡面提取自己想要的特定數據字段,方法各異,這裡我用的是用DataTable的相關操作。

     首先打開數據庫鏈接

            string strCon = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
            SqlConnection conn = new SqlConnection(strCon);
            conn.Open();

     創建dataTable對象

            DataTable dt = new DataTable();

     創建SQLDataadapt對象來操作數據源存儲過程p_OperatorDetails

            SqlDataAdapter da=new SqlDataAdapter("p_OperatorDetails",conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

     創建sql參數並為其賦值

            SqlParameter p1 = new SqlParameter("@sDatetime", SqlDbType.DateTime);
            SqlParameter p2 = new SqlParameter("@eDatetime", SqlDbType.DateTime);
            SqlParameter p3 = new SqlParameter("@operatorNo", SqlDbType.Int);
            SqlParameter p4 = new SqlParameter("@transdesc", SqlDbType.VarChar);

            p1.Value = sTransactionDateStart;
            p2.Value = sTransactionDateEnd;
            if (sOperatorNo != "")
            {
                p3.Value = Convert.ToInt32(sOperatorNo);
                da.SelectCommand.Parameters.Add(p3);
            }
            else
            {
                p3.Value = "";
            }
           
            if (sTransTypeNo != "")
            {
                p4.Value = sTransTypeNo;
                da.SelectCommand.Parameters.Add(p4);
            }
            else
            {
                p4.Value = "";
            }
       
            da.SelectCommand.Parameters.Add(p1);
            da.SelectCommand.Parameters.Add(p2);

      通過SqlDataAdapter對象將得到的數據集填充到DataTable中去

            da.Fill(dt);

      注意直接得到的得到的DataTable對象是不能夠進行sql操作的(可能我做的項目用這種方法並不適用於各位),關鍵的問題來了,我想要這個數據集裡面的特點字段而不是整個存儲過程所得到的數據集,我所使用的方法是用DataTable的Clone方法可能一張新的虛擬表來提供數據供我的報表使用。

            DataTable newdt = new DataTable();
            newdt = dt.Clone();

      DataTable中的數據不能夠直接像實際數據表一樣操作數據,但是也有它自己的方法

            newdt = dt.DefaultView.ToTable(false, new string[] { "BankCardId", "EmployeeName", "Deptname", "TransDesc", "DeviceDateTime", "remain","OperatorName" });

            至此,我想要的特定字段的虛擬表就出來了(報表用,做了幾天發現這種方法還是最合適的,不知道各位大牛有沒有更好的方法)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved