C#调用存储过程详解(带返回值、参数输入输出等)

本文实例讲述了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

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

(0)

相关推荐

  • c# List find()方法返回值的问题说明(返回结果为对象的指针)

    C#中List<T>中泛型T如果是一个对象的话,则利用Find函数返回的将是这个对象的指针,对其返回对象的属性进行操作,也会影响list中相应元素对象的值.验证如下:1.新建一个Class1类,其含有两个姓名和分数两个属性: 复制代码 代码如下: <SPAN style="FONT-SIZE: 18px">    public class Class1    {        public string name{ get; set; }        publ

  • C#打开php链接传参然后接收返回值的关键代码

    php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate']; $p=$_POST['pid']; $a=$_POST["afid"]; $d=$_POST["dtime"]; require('../db/conn.php');//打开文件 $sql_expire="insert into `m-haibook`.t

  • c#获取存储过程返回值示例分享

    存储过程: 复制代码 代码如下: CREATE  PROCEDURE [dbo].[Proc_GetInfo] @ywdm varchar(10), @value varchar(20) output AS begin set @value=Select top 1 createt From table Where ywdm=@ywdm end C#获取存储过程返回值: 复制代码 代码如下: var db = DatabaseFactory.CreateDatabase(); var cmd =

  • C#中ExecuteNonQuery()返回值注意点分析

    本文实例讲述了C#中ExecuteNonQuery()返回值注意点.对于C#数据库程序设计有一定的借鉴价值.分享给大家供大家参考之用.具体分析如下: 首先,在查询某个表中是否有数据的时候,我们通常用ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否.结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解,回头查了下资料,如下显示: SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影

  • C#获取存储过程返回值和输出参数值的方法

    1.获取Return返回值 复制代码 代码如下: //存储过程//Create PROCEDURE MYSQL//     @a int,//     @b int//AS//     return @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());conn.Open();SqlCommand MyC

  • C#实现向多线程传参的三种方式实例分析

    本文实例讲述了C#实现向多线程传参的三种方式.分享给大家供大家参考,具体如下: 从<C#高级编程>了解到给线程传递参数有两种方式,一种方式是使用带ParameterizedThreadStart委托参数的Thread构造函数,另一种方式是创建一个自定义类,把线程的方法定义为实例的方法,这样就可以初始化实例的数据,之后启动线程. 方式一:使用ParameterizedThreadStart委托 如果使用了ParameterizedThreadStart委托,线程的入口必须有一个object类型的

  • C#调用Rar文件及获取Rar返回值的方法

    本文实例讲述了C#调用Rar文件及获取Rar返回值的方法.分享给大家供大家参考.具体如下: 该程序适用于C#调用. 所需的Rar.exe可从WinRar官网下载控制台版. 按钮OK点击事件: System.Diagnostics.Process process; private void btnRAR_Click(object sender, EventArgs e) { if (System.IO.File.Exists("Rar.exe")) { try { process = n

  • C#实现.net页面之间传值传参方法汇总

    本文实例总结了C#实现.net页面之间传值传参方法.分享给大家供大家参考.具体实现方法分析如下: 一.QueryString传值 一般来说,QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.如下面实例所示: 复制代码 代码如下: private void Button1_Click(object sender, System.EventA

  • C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了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 E

  • 详解Vue返回值动态生成表单及提交数据的办法

    目录 主要解决的问题 一.后端返回的数据,提交到后端的数据格式如下: 二.vue前端代码如下: 总结 主要解决的问题 1.vue在循环的时候需要动态绑定不同的v-model:vue动态的表单,数据怎么绑定呢? 2.动态表单上所有name属性对应的键值对的形式提交到后端 一.后端返回的数据,提交到后端的数据格式如下: // 后端返回的数据,根据返回类型用对应的组件 [ { "componentType": "input", "componentName&qu

  • sql存储过程详解

    1,不带参数的存储过程 2,带输入参数的存储过程 3,带输入和输出参数的存储过程 4,带返回值的存储过程 不带参数的存储过程 例如,以下存储过程返回Employees表中所有职员的记录. 存储过程代码: USE TSQLFundamentals2008; GO IF OBJECT_ID('usp_ProcDemoNoParam','P') IS NOT NULL DROP PROC usp_ProcDemoNoParam; GO -- 1,不带参数 CREATE PROC usp_ProcDem

  • Java带返回值的方法的定义和调用详解

    目录 带返回值的方法练习 方法的注意事项 方法注意事项 方法通用格式 带返回值的方法练习 需求: 设计一个方法可以获取两个数的较大值,数据来自于参数 思路: 1. 定义一个方法,用于获取两个数中的较大数 public static int getMax(int a,int b){ } 2.使用分支语句分两种情况对两个数的大小进行处理 if (a>b) { }else{ } 3. 根据题设分别设置两种情况下对应返回值结果 if (a>b) { return a; }else{ return b;

  • asp.net实现调用存储过程并带返回值的方法

    本文实例讲述了asp.net实现调用存储过程并带返回值的方法.分享给大家供大家参考,具体如下: /// <summary> /// DataBase 的摘要说明 /// </summary> public class DataBase { /// <summary> ///DataBase 的摘要说明 /// </summary> protected static SqlConnection BaseSqlConnection = new SqlConnec

  • Java调用Oracle存储过程详解

    Java调用Oracle存储过程详解 步骤: 1.编写Oracle存储过程 2.编写数据库获取连接工具类 3.编写简单应用调用存储过程 实现: 1.Oracle存储过程: /*测试表*/ create table test( id varchar2(32), name varchar2(32) ); /*存储过程 插入数据*/ CREATE OR REPLACE PROCEDURE insert_procedure( PARA1 IN VARCHAR2, PARA2 IN VARCHAR2 )

  • Mysql带返回值与不带返回值的2种存储过程写法

    过程1:带返回值: drop procedure if exists proc_addNum; create procedure proc_addNum (in x int,in y int,out sum int) BEGIN SET sum= x + y; end 然后,执行过程,out输出返回值: call proc_addNum(2,3,@sum); select @sum; 过程2:不带返回值: drop procedure if exists proc_addNum; create

  • 创建公共调用 jQuery Ajax 带返回值

    复制代码 代码如下: <script type="text/javascript"> /* 请求Ajax 带返回值,并弹出提示框提醒 --------------------------------------------------*/ function getAjax(url, parm, callBack) { $.ajax({ type: 'post', dataType: "text", url: url, data: parm, cache:

  • Java 带参数与带返回值的方法的定义和调用

    目录 带参数方法的定义和调用 形参和实参 带参数方法练习 带返回值的方法的定义和调用 带返回值的方法定义 带返回值的方法调用 带参数方法的定义和调用 形参和实参 形参:方法定义中的参数 相当于变量定义格式,例int number 实参:方法调用中参数 等同于变量或常量,例如10   , number 带参数方法练习 需求: 设计一个方法用于打印两个数中最大数,数据来自于方法参数 思路: 1.定义一个方法,用于打印两个书中的最大数,例如getMax() public static void get

  • shell函数内调用另一个函数(不带返回值和带返回值)

    目录 一.函数B调用不带返回值的函数A 二.函数B调用带返回值的函数A,并接收函数A的返回值进行输出 一.函数B调用不带返回值的函数A 新建文件,命名为 test.sh,添加如下代码: #!/bin/bash # 即将被调用的函数A function A(){ a="aaa" echo $a } # 函数B,直接调用A function B(){ A echo "bbb" } B 命令行中通过sh test.sh执行结果: 二.函数B调用带返回值的函数A,并接收函数

随机推荐