关于storedprocedure的信息

http://www.itjxue.com  2023-02-14 21:47  来源:未知  点击次数: 

存储过程的名词解释

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升

c#如何调用 storedprocedure mysqlparameter

* precedure 中用@@rowcount 用来显示上条命令影响的行数

1. procedure 有输入参数,无返回值

procedure :

USE [biyi]

GO

create proc TEST2 (@v1 nvarchar(50),@v2 nvarchar(50))

as

SELECT * FROM PROCE

WHERE @v10 AND @v20

GO

C#中调用

String ConnStr = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;

using (SqlConnection conn = new SqlConnection(ConnStr))

{

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

cmd.CommandText = "TEST2";//Procedure Name is TEST2

cmd.CommandType = CommandType.StoredProcedure;

IDataParameter[] parameters = {

new SqlParameter("@v1", c) , //Procedure 的第一个输入参数

new SqlParameter("@v2", SqlDbType.NVarChar,50), //Procedure 的第二个输入参数

};

parameters[0].Value = "1";

parameters[1].Value = "2";

cmd.Parameters.Add(parameters[0]); //或者 直接 cmd.Parameters.Add( "@v1",SqlDbType.NVarChar,50);

cmd.Parameters.Add(parameters[1]);

conn.Open();

SqlDataAdapter ad = new SqlDataAdapter(cmd);

DataSet ds = new DataSet();

ad.Fill(ds);

this.GridView1.DataSource = ds.Tables[0];

this.GridView1.DataBind();

}

2. procedure 有输入参数,也有返回值

Procedure:

USE [biyi]

GO

create proc TEST3 (@v1 nvarchar(50),@v2 nvarchar(50))

as

if @v1 @v2

return 1

else return 2

GO

C#中调用:

using (SqlConnection conn = new SqlConnection(ConnStr))

{

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

cmd.CommandText = "TEST3";//Procedure Name

cmd.CommandType = CommandType.StoredProcedure;

IDataParameter[] parameters = {

new SqlParameter("@v1", SqlDbType.NVarChar,50) , //Procedure 的第一个输入参数

new SqlParameter("@v2", SqlDbType.NVarChar,50), //Procedure 的第二个输入参数

new SqlParameter("return", SqlDbType.NVarChar,50), //返回值

};

parameters[0].Value = "1";

parameters[1].Value = "2";

parameters[2].Direction = ParameterDirection.ReturnValue;

cmd.Parameters.Add(parameters[0]);

cmd.Parameters.Add(parameters[1]);

cmd.Parameters.Add(parameters[2]);

conn.Open();

cmd.ExecuteNonQuery();

Label1.Text = parameters[2].Value.ToString();

}

何谓store procedure?该如何使用

正确写的话应该是stored procedure

中文翻成预储程序

简单的讲,就是资料库的副程式

不过大部分的情况是...

遇到一件要处理资料的问题时

DBA喜欢写stored procedure

Programmer喜欢在程式处理 XD

很难界定哪种是好或不好

下面有简单的教学

如何接收 Store Procedure 的傳回值

3 种方式:

使用 SELECT 以表格方式传回。

设定 Output Parameter 以参数方式传回。

使用 RETURN 传回 1 个整数型别的资料。

以下列出这 3 种传回方式,在 SQL 及 ADO.NET 中接收的方法。

一、使用 SELECT 以表格方式传回

我们先来看第 1 种,这也是我最常用的方式。

Store Procedure:

01 IF OBJECT_ID('mysp_QueryData') IS NOT NULL

02 DROP PROCEDURE mysp_QueryData

03 GO

04 CREATE PROCEDURE mysp_QueryData (

05 @id int

06 )

07 AS

08 BEGIN

09 SELECT LastName, FirstName

10 FROM Customer

11 WHERE CustomerID = @id;

12 END

在另一支预储程序中要接收此预储程序传回的资料,方法如下:

1 IF OBJECT_ID('tempdb..#tmp') IS NOT NULL

2 DROP TABLE #tmp

3 GO

4 CREATE TABLE #tmp (lname varchar(30), fname varchar(10));

5 INSERT INTO #tmp EXEC mysp_QueryData '1';

6 SELECT * FROM #tmp;

1~2 行:判断若暂存资料表已存在则进行删除。

4~6 行:先建立暂存资料表,再使用 INSERT INTO 方式写入後即可对暂存资料表操作取值。

C#

01 SqlConnection conn = new SqlConnection(strConn);

02 SqlCommand cmd = new SqlCommand(string.Empty, conn);

03 conn.Open();

04

05 cmd.Parameters.Clear();

06 cmd.CommandType = CommandType.StoredProcedure;

07 cmd.CommandText = "mysp_QueryData";

08 cmd.Parameters.Add("@id", SqlDbType.Int).Value = 1;

09

10 SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

11

12 if (reader.HasRows)

13 {

14 reader.Read();

15 Console.WriteLine("Last Name:" + reader["LastName"]);

16 Console.WriteLine("First Name:" + reader["FirstName"]);

17 }

18

19 reader.Close();

20 reader.Dispose();

21

22 conn.Close();

23 conn.Dispose();

此例是以 ExecuteReader() 来进行读取,然後配合 SqlDataReader 物件将栏位值读出。

因传回的内容只有 1 个资料集,所以第 10 行在读取时可以使用 CommandBehavior.SingleRow 来接收传回的资料集,可结省资源及增进效率,但要注意,若是传回的内容有 2 个资料集以上,那麼使用 CommandBehavior.SingleRow 就无法读到第 2 个以後的资料集内容了。

假设传回内容只有 1 个传回值,或是只要读取传回的第 1 笔资料的第 1 个栏位值,可以使用 ExecuteScalar() 将 LastName 读出,如此上面 10~20 行的程式可改为如下:

1 string strName = Convert.ToString(cmd.ExecuteScalar());

2 Console.WriteLine("Last Name:" + strName);

二、设定 Output Parameter 以参数方式传回

Store Procedure:

01 CREATE PROCEDURE mysp_QueryData (

02 @id int,

03 @LastName Varchar(30) output

04 )

05 AS

06 BEGIN

07 SELECT @LastName = LastName

08 FROM Customer

09 WHERE CustomerID = @id;

10 END

关键在第 3 行,在参数後方加上 output 设定为输出参数。

在另一支预储程序中要接收此预储程序传回的输出参数方法如下:

1 DECLARE @lname varchar(30);

2 EXEC mysp_QueryData '1',@lname output;

3 PRINT @lname;

第 2 行:在执行预储程序後方指定参数时,要接收输出的参数设定 output 即可。

C#

01 SqlConnection conn = new SqlConnection(strConn);

02 SqlCommand cmd = new SqlCommand(string.Empty, conn);

03 conn.Open();

04

05 cmd.Parameters.Clear();

06 cmd.CommandType = CommandType.StoredProcedure;

07 cmd.CommandText = "mysp_QueryData";

08 cmd.Parameters.Add("@id", SqlDbType.Int).Value = 1;

09

10 SqlParameter lastName = cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 30);

11 lastName.Direction = ParameterDirection.Output;

12

13 cmd.ExecuteNonQuery();

14

15 Console.WriteLine("Last Name:" + lastName.Value);

16

17 conn.Close();

18 conn.Dispose();

第 10 行:建立要接收输出的参数名称资料,参数名称 @LastName 须与预储程序中的参数名称一样。

第 11 行:设定为输出参数。

第 15 行:用 .value 将传回资料取出。

三、使用 RETURN 传回单一数值

Store Procedure:

1 CREATE PROCEDURE mysp_InsData (

2 @LastName varchar(30),

3 @FirstName varchar(10)

4 )

5 AS

6 BEGIN

7 INSERT INTO Customer (LastName, FirstName) VALUES (@LastName, @FirstName);

8 RETURN SCOPE_IDENTITY();

9 END

在新增完资料後,使用 RETURN 返回新增资料的识别值。

在另一支预储程序中接收此预储程序传回的值:

1 DECLARE @intRow int;

2 EXEC @intRow = mysp_InsData 'Walter', 'Liao';

3 SELECT @intRow;

C#

01 SqlConnection conn = new SqlConnection(strConn);

02 SqlCommand cmd = new SqlCommand(string.Empty, conn);

03 conn.Open();

04

05 cmd.Parameters.Clear();

06 cmd.CommandType = CommandType.StoredProcedure;

07 cmd.CommandText = "mysp_InsData";

08 cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 30).Value = "Walter";

09 cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 10).Value = "Liao";

10

11 SqlParameter retID = cmd.Parameters.Add("@ReturnValue", SqlDbType.Int);

12 retID.Direction = ParameterDirection.ReturnValue;

13

14 try

15 {

16 cmd.ExecuteNonQuery();

17 }

18 catch (Exception ex)

19 {

20 //当新增资料时若发生错误,可撰写程式将错误讯息记录下来

21 //InsErrorLog("mysp_InsData", ex.Message);

22 }

23

24 Console.WriteLine("Return Value:" + retID.Value);

25

26 conn.Close();

27 conn.Dispose();

第 11 行:建立要接收 RETURN 的参数,参数名称 @ReturnValue 可自定。

第 12 行:将参数设定为 Return Value。

第 24 行:用 .value 将传回资料取出。

过程或函数 'StoredProcedure1' 需要参数 '@starttime',但未提供该参数。

StoredProcedure1里有参数@starttime,你调用的时候没给它赋值。

调用存储过程方法

什么是sql中的stored procedures

stored

procedures

就是存储过程,就是已经命名的代码段。

这个和一般编程语言中的方法(函数)类似,可以实现循环、IF判断、异常处理等等。

(责任编辑:IT教学网)

更多

推荐金山WPS文章