C# 存儲過程使用方法


            CREATE PROCEDURE [dbo].[GetNameById]

@studentid varchar(8),

@studentname nvarchar(50) OUTPUT

AS

BEGIN

SELECT @studentname=studentname FROM student

WHERE studentid=@studentid

if @@Error<>0

RETURN -1

else 

RETURN 0 

END

 

 

using (SqlConnection conn = new SqlConnection(connStr))

{

try

{

SqlCommand cmd = new SqlCommand("GetNameById", conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@studentid""09888888");  //給輸入參數賦值

SqlParameter parOutput =cmd.Parameters.Add("@studentname"SqlDbType.NVarChar, 50);  //定義輸出參數

parOutput.Direction = ParameterDirection.Output;  //參數類型為Output

SqlParameter parReturn = new SqlParameter("@return"SqlDbType.Int);

parReturn.Direction = ParameterDirection.ReturnValue;   //參數類型為ReturnValue 

cmd.Parameters.Add(parReturn);

conn.Open();

cmd.ExecuteNonQuery();

MessageBox.Show(parOutput.Value.ToString()); //顯示輸出參數的值

MessageBox.Show(parReturn.Value.ToString());  //顯示返回值

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

}

 

 

Create PROCEDURE AddOrderTran

@country nvarchar(100),

@adds nvarchar(100),

@ynames nvarchar(100),

@pids nvarchar(100),

@cellp nvarchar(100),

@cphone nvarchar(100),

@amounts nvarchar(100),

@cartnumber nvarchar(100)

as

Declare @id int

BEGIN TRANSACTION 

insert into Orders(Order_Country,Order_Adress,Order_UserName,Order_PostID,Cells,Order_Phone,Total_pay,CartNumber,IsPay) 

values (@country,@adds,@ynames,@pids,@cellp,@cphone,@amounts,@cartnumber,'0')

Select @id=@@identity

insert into Orders_Item (OrderNumber,ProductsID,Products_Color,Products_Price,Order_Qty,Item_Total) 

select @id,Carts_Item.ProductsID,Carts_Item.Products_Color,Carts_Item.Products_Price,Carts_Item.Item_Qty,Carts_Item.Total_Pay 

from Carts_Item where Carts_Item.CartNumber=@cartnumber 

delete Carts_Item where CartNumber=@cartnumber

IF @@error <> 0 --發生錯誤

BEGIN

ROLLBACK TRANSACTION

RETURN 0

END

ELSE

BEGIN

COMMIT TRANSACTION

RETURN @id --執行成功

END

 

   

 

#region 執行存儲過程

 

SqlParameter[] param = new SqlParameter[] 

new SqlParameter("@country",country), 

new SqlParameter("@adds",adds), 

new SqlParameter("@ynames",ynames), 

new SqlParameter("@pids"pids), 

new SqlParameter("@cellp",cellp), 

new SqlParameter("@cphone"cphone),

new SqlParameter("@amounts",amounts),

new SqlParameter("@cartnumber",cartnumber),

new SqlParameter("@return",SqlDbType.Int)

};

param[8].Direction = ParameterDirection.ReturnValue;

MSCL.SqlHelper.RunProcedure("AddOrderTran", param);

object obj = param[8].Value; //接受返回值

 

 

//string connStr = System.Configuration.ConfigurationManager.AppSettings["ConStr"].ToString();

//using (SqlConnection conn = new SqlConnection(connStr))

//{

// conn.Open();

// SqlCommand cmd = new SqlCommand("AddOrderTran", conn);

// cmd.CommandType = CommandType.StoredProcedure;

 

// SqlParameter para1 = new SqlParameter("@country", country);

// para1.Direction = ParameterDirection.Input; //參數方向 為輸入參數

// cmd.Parameters.Add(para1);

 

// SqlParameter para2 = new SqlParameter("@adds", adds);

// para2.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para2);

 

// SqlParameter para3 = new SqlParameter("@ynames", ynames);

// para3.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para3);

 

// SqlParameter para4 = new SqlParameter("@pids", pids);

// para4.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para4);

 

// SqlParameter para5 = new SqlParameter("@cellp", cellp);

// para5.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para5);

 

// SqlParameter para6 = new SqlParameter("@cphone", cphone);

// para6.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para6);

 

// SqlParameter para7 = new SqlParameter("@amounts", amounts);

// para7.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para7);

 

// SqlParameter para8 = new SqlParameter("@cartnumber", cartnumber);

// para8.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para8);

 

// SqlParameter paraReturn = new SqlParameter("@return", SqlDbType.Int);

// paraReturn.Direction = ParameterDirection.ReturnValue; //參數方向 為返回參數

// cmd.Parameters.Add(paraReturn);

 

// cmd.ExecuteNonQuery();

 

// object obj = paraReturn;

// if (obj.ToString() == "0")

// {

// //存儲過程執行失敗

// }

// else

// {

// //成功

// }

//}

//#endregion

 

   

 

本文的數據庫用的是sql server自帶數據Northwind 

 

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. 沒有輸入輸出的存儲過程

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. 有返回值的存儲過程

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. 有輸入參數和輸出參數的存儲過程

 

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. 同時具有返回值輸入參數輸出參數的存儲過程

 

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. 同時返回參數和記錄集的存儲過程

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. 返回多個記錄集的存儲過程

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM