C#调用存储过程的ADO.Net
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 ) AS SELECT @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]; } }