C#下SQLServer2008表类型参数传递

在学习SQL Server 2008的过程中,突然发现SQL Server支持自定义表类型,我们可以轻松的将一个SQL Server 2008表类型作为参数传递给存储过程。

创新互联建站是一家专业提供阳朔企业网站建设,专注与网站制作、成都做网站HTML5、小程序制作等业务。10年已为阳朔众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

我们通过ADO.Net在C#下演示这项SQL Server 2008的新功能。

首先,我们在SQL Server 2008下创建一个示例数据库名为Test,再在该数据库下创建一个名为User的表,结构如下:

再在Test数据库下创建一个自定义表类型,取名UserDetailType,如下:

 
 
 
 
  1. CREATE TYPE [dbo].[UserDetailsType] AS TABLE(
  2.     [ID] [varchar](50) NULL,
  3.     [Name] [varchar](50) NULL,
  4.     [Sex] [varchar](50) NULL,
  5.     [Age] [decimal](18, 0) NULL

然后,创建一个存储过程,取名InsertUserInfo,如下:

 
 
 
 
  1. CREATE PROCEDURE [dbo].[InsertUserInfo] @UserInfo  [UserDetailsType] readonly
  2. AS
  3. BEGIN
  4.     insert into [User] ([ID], [Name], [Sex], [Age])
  5.     select [ID], [Name], [Sex], [Age]
  6.     from @UserInfo;
  7. END

启动Visual Studio 2008,创建一个默认的窗体应用程序后,我们需要先在内存中创建一个数据库表DataTable的实例,如下:

 
 
 
 
  1. private static DataTable PrepareDatatable()
  2. {
  3.     DataTable dt = new DataTable("dt");
  4.     DataColumn[] dtc = new DataColumn[4];
  5.     dtc[0] = new DataColumn("ID", System.Type.GetType("System.String"));
  6.     dtc[1] = new DataColumn("Name", System.Type.GetType("System.String"));
  7.     dtc[2] = new DataColumn("Sex", System.Type.GetType("System.String"));
  8.     dtc[3] = new DataColumn("Age", System.Type.GetType("System.Decimal"));
  9.     dt.Columns.AddRange(dtc);
  10.     return dt;

然后,通过SqlCommand执行刚才我们创建的Test数据库存储过程InsertUserInfo,并传递我们在内存中创建的DataTable的实例,如下:

 
 
 
 
  1. private static void SaveUserInfoDetails()
  2.        {
  3.            DataTable dt = PrepareDatatable();
  4.            for (int i=0;i< =5;i++)
  5.            {
  6.                DataRow dr = dt.NewRow();
  7.                dr[0] = i.ToString();
  8.                dr[1] = "Name" + i.ToString();
  9.                dr[2] = "男";
  10.                dr[3] = (i*10).ToString();
  11.                dt.Rows.Add(dr);
  12.            }
  13.            using (SqlConnection conn = new SqlConnection("server=Rithia;database=Test;integrated security=SSPI"))
  14.            {
  15.                SqlCommand cmd = conn.CreateCommand();
  16.                cmd.CommandType = System.Data.CommandType.StoredProcedure;
  17.                cmd.CommandText = "dbo.InsertUserInfo";
  18.                SqlParameter param = cmd.Parameters.AddWithValue("@UserInfo", dt);
  19.                conn.Open();
  20.                cmd.ExecuteNonQuery();
  21.            }
  22.        } 

通过上面的示例,我们可以在程序客户端先创建好要传递的表类型数据,然后传递给存储过程,而存储过程则将SQL Server 2008表类型参数中的记录一次性的添加到了数据库实体表中,这种操作在需要传递给存储过程数组形式的参数时非常非常方便。

该示例在Visual Studio 2008 SP1 + SQL Server 2008 +Windows XP SP3 下编译调试通过。

这样,就在C#下实现了SQL Server 2008表类型参数传递。

分享文章:C#下SQLServer2008表类型参数传递
网页地址:http://www.mswzjz.cn/qtweb/news6/17506.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能