欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net调用存储过程详细介绍

程序员文章站 2024-03-01 20:55:34
 连接字符串  复制代码 代码如下: string conn = configurationmanager.connectionstring...

 连接字符串

 

复制代码 代码如下:

 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