通過存儲過程插入和返回數據

通過存儲過程插入和返回數據

作者:Tariqaziz

翻譯:zhiyong.tong

此文出自:http://www.codeproject.com/

 

導言

使用存儲過程代替標準SQL有很多好處。首先,存儲過程允許提供許多條件邏輯。第二,因爲存儲過程存儲在DBMS中,執行時間被减少。這是因爲一個單一的存儲過程可以執行複雜的SQL語句的集合。第三,SQL Server預編譯存儲過程,所以擁有很好的執行性能。第四,客戶端開發者可以從複雜的設計中分離出來。他們只需要直到存儲過程的名字和返回數據的類型。

 

創建存儲過程?

企業管理器提供一種簡單的方式麳創建存儲過程。首先,選擇要創建存儲過程的數據庫。擴展數據庫節點,右鍵“存儲過程”然後選擇“新的存儲過程”。你應該看到以下內容:

 

CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS

 

”dbo”麳代替OWNER(數據庫擁有者),用存儲過程的名稱代替PROCEDURE NAME。例如:

 

CREATE PROCEDURE [dbo].[GetProducts] AS

 

到目前爲止,我們討論的是使用SQL Server麳創建一個名叫GetProducts的新的存儲過程。我們在AS語句后指定存儲國過程的主體:

 

CREATE PROCEDURE [dbo].[GetProducts] AS SELECT ProductID, ProductName FROM Products

 

點擊檢查語法按鈕麳確認這個存儲過程是符合語法的。請注意以上的GetProducts將要工作在Northwind示例數據庫上。你可以將它修改成你所需要的形式。

 

現在我們已經創建了一個存儲過程,我們將要說明如何使用C#應用程序麳調用它。

 

調用存儲過程

ADO.NET的一個非常好的方麵是它允許開發者与標準SQL語句一樣麳調用存儲過程。

1.  創建一個新的C# Windows Application工程。

2.  在工具欄上拖拽一個DataGrid控件到Form上。按照需要調整大小。

3.  雙擊窗體麳生成Form_load時間句柄。在輸入任何代碼前,添加“using System.Data.SqlClient”在文件的開始。

鍵入以下代碼:

 

private void Form1_Load(object sender, System.EventArgs e) {

SqlConnection conn = new SqlConnection("Data
Source=localhost;Database=db_first;Integrated Security=SSPI"
);
SqlCommand command = new SqlCommand(
"GetProducts", conn);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
adapter.Fill(ds,
"Products");
this.dg_Data.DataSource = ds;

this.dg_Data.DataMember = "Products";

 

向存儲過程中插入數據

在存儲過程中使用INSERTUPDATE,或者DELETE這樣的SQL語句。首先,創建一個存儲過程,這個存儲過程可能有或者沒有參數,然後調用存儲過程提供需要的參數值。以下的示例展示了在用戶表裏面如何插入一個新的用戶,這個表裏面有usernamepassword字段。

 

Sql Server代碼

 

CREATE PROCEDURE [dbo].[InsertUser] (
@Username varchar(50), @Password varchar(50)
)
AS INSERT INTO Users VALUES(@Username, @Password)

 

C#代碼

 

string username = Username.Text // get username from user string //
password = Password.Text // get password from user

 

SqlConnection conn = new SqlConnection"
DataSource=localhost;Database=db_First;Integrated Security=SSPI"
);
SqlCommand command = new SqlCommand("InsertUser", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Username", SqlDbType.VarChar).Value = username;
command.Parameters.Add("@Password", SqlDbType.VarChar).Value = password;
conn.Open(); int rows = command.ExecuteNonQuery();
conn.Close();

 

首先,我們從用戶中返回usernamepassword。這個信息可能從窗體中輸入,通過一個消息對話框或者通過其他方式。要點在于,用戶指定usernamepassword然後應用程序向數據庫中插入數據。同樣需要注意的是,我們調用Connection對象的ExecuteNonQuery()方法。我們調用這個方法麳指定存儲過程不需要返回查詢結果集,返回的整數值指定通過執行語句有多少行受到影響。ExecuteNonQuery()用于象INSERTUPDATEDELETE這樣的DML語句。注意,我們可以測試行的值麳檢查存儲過程是否成功插入數據。

<code>if (rows == 1) {
MessageBox.Show("Create new user SUCCESS!");
}
else {
MessageBox.Show("Create new user FAILED!"); }

 

我們檢查行的值麳檢查是否等于一行。因爲我們的存儲過程只完成了一次插入操作,如果成功,ExecuteNonQuery()方法應該返回1麳指定插入了一行。對于其他的SQL語句,特別是UPDATEDELETE語句可能影響多于一行,存儲過程將要返回受語句所影響的行數。

 

結論

存儲過程提供給開發者許多標準SQL不擁有的特性。ADO.NET允許我們在應用程序中使用存儲過程。這兩點綜合起來允許我們快速建立非常强大的應用程序。

 

有關Tariqaziz

設計和邏輯是我所喜愛的,我喜歡用它麳做一些創造性的工作。

转载于:https://www.cnblogs.com/tongzhiyong/archive/2007/02/23/654513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值