標籤:
using System.Data.SqlClient; //如果預存程序沒有輸入和輸出參數,而且不返回查詢結果 SqlCommand cmd = new SqlCommand("預存程序名", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.ExecuteNonQuery();
//如果預存程序帶輸入參數 SqlCommand cmd = new SqlCommand("預存程序名", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("預存程序輸入參數變數名", 資料類型));//如cmd.Parameters.Add(new SqlParameter("@riqi", SqlDbType.DateTime, 8));//把具體的值傳給輸入參數 cmd.Parameters["預存程序輸入參數"].Value =具體的值;//如cmd.Parameters["@riqi"].Value = this.textBox1.Text;//執行預存程序 cmd.ExecuteNonQuery();
//如果預存程序帶輸出參數 SqlCommand cmd = new SqlCommand("預存程序名", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("預存程序輸出參數變數名", 資料類型)); cmd.Parameters["預存程序輸出參數變數名"].Direction = ParameterDirection.Output; cmd.ExecuteNonQuery();//顯示輸出參數的值cmd.Parameters["預存程序輸出參數變數名"].Value //如this.textBox3.Text = cmd.Parameters["@ItemCount"].Value.ToString();
//如果預存程序帶輸出和輸出參數 SqlCommand cmd = new SqlCommand("預存程序名", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("預存程序輸入參數變數名", 資料類型)); cmd.Parameters["預存程序輸入參數"].Value =具體的值; cmd.Parameters.Add(new SqlParameter("預存程序輸出參數變數名", 資料類型)); cmd.Parameters["預存程序輸出參數變數名"].Direction = ParameterDirection.Output; cmd.ExecuteNonQuery();//顯示輸出參數的值cmd.Parameters["預存程序輸出參數變數名"].Value //如this.textBox3.Text = cmd.Parameters["@ItemCount"].Value.ToString();
調用帶輸入參數的預存程序【例2】建立預存程序AddNewCategory實現往Category表中添加新的商品類別,新的商品分類名稱CategoryName作為輸入參數輸入。CREATE PROCEDURE AddNewCategory (@categoryName nvarchar(50))AS INSERT INTO Category (CategoryName) VALUES (@categoryName)
【例】調用上述預存程序AddNewCategory try { // 資料庫連接字串 string connStr = "server=localhost;uid=sa;pwd=;database=eshop"; // 建立Connection 對象 SqlConnection conn = new SqlConnection(connStr); // 開啟資料庫連接 conn.Open(); SqlCommand cmd = new SqlCommand("AddNewCategory", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@categoryName", SqlDbType.NVarChar,50)); cmd.Parameters["@categoryName"].Value = this.textBox1.Text; cmd.ExecuteNonQuery(); MessageBox.Show("插入成功"); } catch { MessageBox.Show("操作不成功"); return; }
調用帶輸入和輸出參數的預存程序【例1】建立預存程序ShoppingCartItemCount擷取某購物車中購物種數並作為輸出參數輸出,購物車編號CartID為輸入參數。CREATE Procedure [dbo].[ShoppingCartItemCount]( @CartID nvarchar(50), @ItemCount int OUTPUT)ASSELECT @ItemCount = COUNT(ProductID) FROM ShoppingCart WHERE CartID = @CartID
【例】調用上述預存程序ShoppingCartItemCount try { // 資料庫連接字串 string connStr = "server=localhost;uid=sa;pwd=;database=eshop"; // 建立Connection 對象 SqlConnection conn = new SqlConnection(connStr); // 開啟資料庫連接 conn.Open(); SqlCommand cmd = new SqlCommand("ShoppingCartItemCount", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@CartID", SqlDbType.NVarChar,50)); cmd.Parameters["@CartID"].Value = this.textBox2.Text; cmd.Parameters.Add(new SqlParameter("@ItemCount",SqlDbType.Int)); cmd.Parameters["@ItemCount"].Direction = ParameterDirection.Output; cmd.ExecuteNonQuery(); //顯示輸出參數的值cmd.Parameters["預存程序輸出參數變數名"].Value this.textBox3.Text = cmd.Parameters["@ItemCount"].Value.ToString(); } catch { MessageBox.Show("操作不成功"); return; }
實際例子:
string constr = "server=192.168.9.111;database=111;uid=sa;pwd=1111234"; using(SqlConnection conn=new SqlConnection(constr)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("p_pageSelect", conn)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@num", SqlDbType.Int)); cmd.Parameters.Add(new SqlParameter("@tableName", SqlDbType.NVarChar, 50)); cmd.Parameters.Add(new SqlParameter("@startNum", SqlDbType.Int)); cmd.Parameters["@num"].Value = this.tbNum.Text; cmd.Parameters["@tableName"].Value = this.cmbTableName.Text; cmd.Parameters["@startNum"].Value = this.tbStartNum.Text; SqlDataAdapter sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); sda.Fill(ds); dgvData.DataSource= ds.Tables[0]; } }
C#調用預存程序