C#下SQL Server 2008表類型參數(shù)傳遞
在學(xué)習(xí)SQL Server 2008的過程中,突然發(fā)現(xiàn)SQL Server支持自定義表類型,我們可以輕松的將一個SQL Server 2008表類型作為參數(shù)傳遞給存儲過程。
我們通過ADO.Net在C#下演示這項SQL Server 2008的新功能。
首先,我們在SQL Server 2008下創(chuàng)建一個示例數(shù)據(jù)庫名為Test,再在該數(shù)據(jù)庫下創(chuàng)建一個名為User的表,結(jié)構(gòu)如下:
再在Test數(shù)據(jù)庫下創(chuàng)建一個自定義表類型,取名UserDetailType,如下:
- CREATE TYPE [dbo].[UserDetailsType] AS TABLE(
- [ID] [varchar](50) NULL,
- [Name] [varchar](50) NULL,
- [Sex] [varchar](50) NULL,
- [Age] [decimal](18, 0) NULL
- )
然后,創(chuàng)建一個存儲過程,取名InsertUserInfo,如下:
- CREATE PROCEDURE [dbo].[InsertUserInfo] @UserInfo [UserDetailsType] readonly
- AS
- BEGIN
- insert into [User] ([ID], [Name], [Sex], [Age])
- select [ID], [Name], [Sex], [Age]
- from @UserInfo;
- END
啟動Visual Studio 2008,創(chuàng)建一個默認(rèn)的窗體應(yīng)用程序后,我們需要先在內(nèi)存中創(chuàng)建一個數(shù)據(jù)庫表DataTable的實例,如下:
- private static DataTable PrepareDatatable()
- {
- DataTable dt = new DataTable("dt");
- DataColumn[] dtc = new DataColumn[4];
- dtc[0] = new DataColumn("ID", System.Type.GetType("System.String"));
- dtc[1] = new DataColumn("Name", System.Type.GetType("System.String"));
- dtc[2] = new DataColumn("Sex", System.Type.GetType("System.String"));
- dtc[3] = new DataColumn("Age", System.Type.GetType("System.Decimal"));
- dt.Columns.AddRange(dtc);
- return dt;
- }
然后,通過SqlCommand執(zhí)行剛才我們創(chuàng)建的Test數(shù)據(jù)庫存儲過程InsertUserInfo,并傳遞我們在內(nèi)存中創(chuàng)建的DataTable的實例,如下:
- private static void SaveUserInfoDetails()
- {
- DataTable dt = PrepareDatatable();
- for (int i=0;i< =5;i++)
- {
- DataRow dr = dt.NewRow();
- dr[0] = i.ToString();
- dr[1] = "Name" + i.ToString();
- dr[2] = "男";
- dr[3] = (i*10).ToString();
- dt.Rows.Add(dr);
- }
- using (SqlConnection conn = new SqlConnection("server=Rithia;database=Test;integrated security=SSPI"))
- {
- SqlCommand cmd = conn.CreateCommand();
- cmd.CommandType = System.Data.CommandType.StoredProcedure;
- cmd.CommandText = "dbo.InsertUserInfo";
- SqlParameter param = cmd.Parameters.AddWithValue("@UserInfo", dt);
- conn.Open();
- cmd.ExecuteNonQuery();
- }
- }
通過上面的示例,我們可以在程序客戶端先創(chuàng)建好要傳遞的表類型數(shù)據(jù),然后傳遞給存儲過程,而存儲過程則將SQL Server 2008表類型參數(shù)中的記錄一次性的添加到了數(shù)據(jù)庫實體表中,這種操作在需要傳遞給存儲過程數(shù)組形式的參數(shù)時非常非常方便。
該示例在Visual Studio 2008 SP1 + SQL Server 2008 +Windows XP SP3 下編譯調(diào)試通過。
這樣,就在C#下實現(xiàn)了SQL Server 2008表類型參數(shù)傳遞。
【編輯推薦】