存儲過程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" });
至此,我想要的特定字段的虛擬表就出來了(報表用,做了幾天發現這種方法還是最合適的,不知道各位大牛有沒有更好的方法)。