.net调用存储过程详细介绍
连接字符串
string conn = configurationmanager.connectionstrings["northwindconnectionstring"].connectionstring;
confige文件
<connectionstrings>
<add name="northwindconnectionstring" connectionstring="data source=.;initial catalog=northwind;integrated security=true" providername="system.data.sqlclient"/>
</connectionstrings>
1. 只返回单一记录集的存储过程
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
// 设置sql连接
cmd.connection = sqlconn;
// 如果执行语句
cmd.commandtext = "categoriestest1";
// 指定执行语句为存储过程
cmd.commandtype = commandtype.storedprocedure;
sqldataadapter dp = new sqldataadapter(cmd);
dataset ds = new dataset();
// 填充dataset
dp.fill(ds);
// 以下是显示效果
gridview1.datasource = ds;
gridview1.databind();
存储过程categoriestest1
create procedure categoriestest1
as
select *
from categories
go
2. 没有输入输出的存储过程
c#代码部分
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
cmd.connection = sqlconn;
cmd.commandtext = "categoriestest2";
cmd.commandtype = commandtype.storedprocedure;
sqlconn.open();
// 执行并显示影响行数
label1.text = cmd.executenonquery().tostring();
sqlconn.close();
存储过程categoriestest2
create procedure categoriestest2 as
insert into dbo.categories
(categoryname,[description],[picture])
values ('test1','test1',null)
go
3. 有返回值的存储过程
c#代码部分
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
cmd.connection = sqlconn;
cmd.commandtext = "categoriestest3";
cmd.commandtype = commandtype.storedprocedure;
// 创建参数
idataparameter[] parameters = {
new sqlparameter("rval", sqldbtype.int,4)
};
// 将参数类型设置为 返回值类型
parameters[0].direction = parameterdirection.returnvalue;
// 添加参数
cmd.parameters.add(parameters[0]);
sqlconn.open();
// 执行存储过程并返回影响的行数
label1.text = cmd.executenonquery().tostring();
sqlconn.close();
// 显示影响的行数和返回值
label1.text += "-" + parameters[0].value.tostring() ;
存储过程categoriestest3
create procedure categoriestest3
as
insert into dbo.categories
(categoryname,[description],[picture])
values ('test1','test1',null)
return @@rowcount
go
4. 有输入参数和输出参数的存储过程
c#代码部分
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
cmd.connection = sqlconn;
cmd.commandtext = "categoriestest4";
cmd.commandtype = commandtype.storedprocedure;
// 创建参数
idataparameter[] parameters = {
new sqlparameter("@id", sqldbtype.int,4) ,
new sqlparameter("@categoryname", sqldbtype.nvarchar,15) ,
};
// 设置参数类型
parameters[0].direction = parameterdirection.output; // 设置为输出参数
parameters[1].value = "testcategoryname";
// 添加参数
cmd.parameters.add(parameters[0]);
cmd.parameters.add(parameters[1]);
sqlconn.open();
// 执行存储过程并返回影响的行数
label1.text = cmd.executenonquery().tostring();
sqlconn.close();
// 显示影响的行数和输出参数
label1.text += "-" + parameters[0].value.tostring() ;
存储过程categoriestest4
create procedure categoriestest4
@id int output,
@categoryname nvarchar(15)
as
insert into dbo.categories
(categoryname,[description],[picture])
values (@categoryname,'test1',null)
set @id = @@identity
go
5. 同时具有返回值、输入参数、输出参数的存储过程
c#代码部分
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
cmd.connection = sqlconn;
cmd.commandtext = "categoriestest5";
cmd.commandtype = commandtype.storedprocedure;
// 创建参数
idataparameter[] parameters = {
new sqlparameter("@id", sqldbtype.int,4) ,
new sqlparameter("@categoryname", sqldbtype.nvarchar,15) ,
new sqlparameter("rval", sqldbtype.int,4)
};
// 设置参数类型
parameters[0].direction = parameterdirection.output; // 设置为输出参数
parameters[1].value = "testcategoryname"; // 给输入参数赋值
parameters[2].direction = parameterdirection.returnvalue; // 设置为返回值
// 添加参数
cmd.parameters.add(parameters[0]);
cmd.parameters.add(parameters[1]);
cmd.parameters.add(parameters[2]);
sqlconn.open();
// 执行存储过程并返回影响的行数
label1.text = cmd.executenonquery().tostring();
sqlconn.close();
// 显示影响的行数,输出参数和返回值
label1.text += "-" + parameters[0].value.tostring() + "-" + parameters[2].value.tostring();
存储过程categoriestest5
create procedure categoriestest5
@id int output,
@categoryname nvarchar(15)
as
insert into dbo.categories
(categoryname,[description],[picture])
values (@categoryname,'test1',null)
set @id = @@identity
return @@rowcount
go
6. 同时返回参数和记录集的存储过程
c#代码部分
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
cmd.connection = sqlconn;
cmd.commandtext = "categoriestest6";
cmd.commandtype = commandtype.storedprocedure;
// 创建参数
idataparameter[] parameters = {
new sqlparameter("@id", sqldbtype.int,4) ,
new sqlparameter("@categoryname", sqldbtype.nvarchar,15) ,
new sqlparameter("rval", sqldbtype.int,4) // 返回值
};
// 设置参数类型
parameters[0].direction = parameterdirection.output; // 设置为输出参数
parameters[1].value = "testcategoryname"; // 给输入参数赋值
parameters[2].direction = parameterdirection.returnvalue; // 设置为返回值
// 添加参数
cmd.parameters.add(parameters[0]);
cmd.parameters.add(parameters[1]);
cmd.parameters.add(parameters[2]);
sqldataadapter dp = new sqldataadapter(cmd);
dataset ds = new dataset();
// 填充dataset
dp.fill(ds);
// 显示结果集
gridview1.datasource = ds.tables[0];
gridview1.databind();
label1.text = "";
// 显示输出参数和返回值
label1.text += parameters[0].value.tostring() + "-" + parameters[2].value.tostring();
存储过程categoriestest6
create procedure categoriestest6
@id int output,
@categoryname nvarchar(15)
as
insert into dbo.categories
(categoryname,[description],[picture])
values (@categoryname,'test1',null)
set @id = @@identity
select * from categories
return @@rowcount
go
7. 返回多个记录集的存储过程
c#代码部分
sqlconnection sqlconn = new sqlconnection(conn);
sqlcommand cmd = new sqlcommand();
cmd.connection = sqlconn;
cmd.commandtext = "categoriestest7";
cmd.commandtype = commandtype.storedprocedure;
sqldataadapter dp = new sqldataadapter(cmd);
dataset ds = new dataset();
// 填充dataset
dp.fill(ds);
// 显示结果集1
gridview1.datasource = ds.tables[0];
gridview1.databind();
// 显示结果集2
gridview2.datasource = ds.tables[1];
gridview2.databind();
存储过程categoriestest7
create procedure categoriestest7
as
select * from categories
select * from categories
go