ADO.NET 3.5 同SQL 2008的新的存储过程保存方式
1. 我们在SQL 2008当中新建一个测试用表。
create table employee (
id int,
name varchar(100)
)
2.创建一个类型。
create type emplyeetable as Table
(
id int,name varchar(100)
)
这个类型同表的结构是一样的。生成后在 [DB]->Programmability->Types->User-Defined Table Types节点下面就可见。
3.创建存储过程
create proc InsertEmployee(@em emplyeetable readonly)
as
begin
insert into employee
select * from @em
end
这里要注意了:readonly这个是必需的。emplyeetable 这个就是type的名称。
接着我们可以查询分析器当中用下面的语句来测试一下了
declare @t as emplyeetable
insert into @t values(1,'terry')
execute InsertEmployee @t
-------------
运行完之后,应该是可以将数据插入到数据库的,那么我们就要进入C#当中进入程序的编写了。先创建一个测试工程。
public void TestTest()
{
//自己改一下连接字符串吧
SqlConnection myconn = new SqlConnection("Data Source=localhost;Initial Catalog=TestDB;Integrated Security=True");
myconn.Open();
SqlCommand cmd = new SqlCommand();
cmd = myconn.CreateCommand();
//-------这里就是组装一个DataTable出来给程序。
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("id",System.Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("name", System.Type.GetType("System.String")));
dt.Rows.Add(1, "Terry");
//---------
cmd.Connection=myconn ;
cmd.CommandText="InsertEmployee";
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter sp = new SqlParameter();
sp.SqlDbType = SqlDbType.Structured;
sp.TypeName = "emplyeetable";
sp.Value = dt;
sp.ParameterName = "@em";
cmd.Parameters.Add(sp);
cmd.ExecuteNonQuery();
}