C#调用存储过程带输出参数或返回值

分类: Asp.net MSSQL2014-05-26 14:02 330人阅读 评论(0) 收藏 举报
[csharp] view plaincopyprint?
  1. CREATE PROCEDURE [dbo].[GetNameById]
  2. @studentid varchar(8),
  3. @studentname nvarchar(50) OUTPUT
  4. AS
  5. BEGIN
  6. SELECT @studentname=studentname FROM student
  7. WHERE studentid=@studentid
  8. if @@Error<>0
  9. RETURN -1
  10. else
  11. RETURN 0
  12. END
  13. using (SqlConnection conn = new SqlConnection(connStr))
  14. {
  15. try
  16. {
  17. SqlCommand cmd = new SqlCommand("GetNameById", conn);
  18. cmd.CommandType = CommandType.StoredProcedure;
  19. cmd.Parameters.AddWithValue("@studentid", "09888888");  //给输入参数赋值
  20. SqlParameter parOutput =cmd.Parameters.Add("@studentname", SqlDbType.NVarChar, 50);  //定义输出参数
  21. parOutput.Direction = ParameterDirection.Output;  //参数类型为Output
  22. SqlParameter parReturn = new SqlParameter("@return", SqlDbType.Int);
  23. parReturn.Direction = ParameterDirection.ReturnValue;   //参数类型为ReturnValue
  24. cmd.Parameters.Add(parReturn);
  25. conn.Open();
  26. cmd.ExecuteNonQuery();
  27. MessageBox.Show(parOutput.Value.ToString());   //显示输出参数的值
  28. MessageBox.Show(parReturn.Value.ToString());  //显示返回值
  29. }
  30. catch (System.Exception ex)
  31. {
  32. MessageBox.Show(ex.Message);
  33. }
  34. }
  35. Create PROCEDURE AddOrderTran
  36. @country nvarchar(100),
  37. @adds nvarchar(100),
  38. @ynames nvarchar(100),
  39. @pids nvarchar(100),
  40. @cellp nvarchar(100),
  41. @cphone nvarchar(100),
  42. @amounts nvarchar(100),
  43. @cartnumber nvarchar(100)
  44. as
  45. Declare @id int
  46. BEGIN TRANSACTION
  47. insert into Orders(Order_Country,Order_Adress,Order_UserName,Order_PostID,Cells,Order_Phone,Total_pay,CartNumber,IsPay)
  48. values (@country,@adds,@ynames,@pids,@cellp,@cphone,@amounts,@cartnumber,'0')
  49. Select @id=@@identity
  50. insert into Orders_Item (OrderNumber,ProductsID,Products_Color,Products_Price,Order_Qty,Item_Total)
  51. select  @id,Carts_Item.ProductsID,Carts_Item.Products_Color,Carts_Item.Products_Price,Carts_Item.Item_Qty,Carts_Item.Total_Pay
  52. from Carts_Item where Carts_Item.CartNumber=@cartnumber
  53. delete Carts_Item where CartNumber=@cartnumber
  54. IF @@error <> 0  --发生错误
  55. BEGIN
  56. ROLLBACK TRANSACTION
  57. RETURN 0
  58. END
  59. ELSE
  60. BEGIN
  61. COMMIT TRANSACTION
  62. RETURN @id    --执行成功
  63. END
  64. #region 执行存储过程
  65. SqlParameter[] param = new SqlParameter[]
  66. {
  67. new SqlParameter("@country",country),
  68. new SqlParameter("@adds",adds),
  69. new SqlParameter("@ynames",ynames),
  70. new SqlParameter("@pids", pids),
  71. new SqlParameter("@cellp",cellp),
  72. new SqlParameter("@cphone", cphone),
  73. new SqlParameter("@amounts",amounts),
  74. new SqlParameter("@cartnumber",cartnumber),
  75. new SqlParameter("@return",SqlDbType.Int)
  76. };
  77. param[8].Direction = ParameterDirection.ReturnValue;
  78. MSCL.SqlHelper.RunProcedure("AddOrderTran", param);
  79. object obj = param[8].Value; //接受返回值
  80. //string connStr = System.Configuration.ConfigurationManager.AppSettings["ConStr"].ToString();
  81. //using (SqlConnection conn = new SqlConnection(connStr))
  82. //{
  83. //    conn.Open();
  84. //    SqlCommand cmd = new SqlCommand("AddOrderTran", conn);
  85. //    cmd.CommandType = CommandType.StoredProcedure;
  86. //    SqlParameter para1 = new SqlParameter("@country", country);
  87. //    para1.Direction = ParameterDirection.Input;  //参数方向 为输入参数
  88. //    cmd.Parameters.Add(para1);
  89. //    SqlParameter para2 = new SqlParameter("@adds", adds);
  90. //    para2.Direction = ParameterDirection.Input;
  91. //    cmd.Parameters.Add(para2);
  92. //    SqlParameter para3 = new SqlParameter("@ynames", ynames);
  93. //    para3.Direction = ParameterDirection.Input;
  94. //    cmd.Parameters.Add(para3);
  95. //    SqlParameter para4 = new SqlParameter("@pids", pids);
  96. //    para4.Direction = ParameterDirection.Input;
  97. //    cmd.Parameters.Add(para4);
  98. //    SqlParameter para5 = new SqlParameter("@cellp", cellp);
  99. //    para5.Direction = ParameterDirection.Input;
  100. //    cmd.Parameters.Add(para5);
  101. //    SqlParameter para6 = new SqlParameter("@cphone", cphone);
  102. //    para6.Direction = ParameterDirection.Input;
  103. //    cmd.Parameters.Add(para6);
  104. //    SqlParameter para7 = new SqlParameter("@amounts", amounts);
  105. //    para7.Direction = ParameterDirection.Input;
  106. //    cmd.Parameters.Add(para7);
  107. //    SqlParameter para8 = new SqlParameter("@cartnumber", cartnumber);
  108. //    para8.Direction = ParameterDirection.Input;
  109. //    cmd.Parameters.Add(para8);
  110. //    SqlParameter paraReturn = new SqlParameter("@return", SqlDbType.Int);
  111. //    paraReturn.Direction = ParameterDirection.ReturnValue;  //参数方向 为返回参数
  112. //    cmd.Parameters.Add(paraReturn);
  113. //    cmd.ExecuteNonQuery();
  114. //    object obj = paraReturn;
  115. //    if (obj.ToString() == "0")
  116. //    {
  117. //        //存储过程执行失败
  118. //    }
  119. //    else
  120. //    {
  121. //        //成功
  122. //    }
  123. //}
  124. //#endregion
  125. 本文的数据库用的是sql server自带数据Northwind
  126. 1.只返回单一记录集的存储过程
  127. SqlConnection sqlconn = new SqlConnection(conn);
  128. SqlCommand cmd = new SqlCommand();
  129. // 设置sql连接
  130. cmd.Connection = sqlconn;
  131. // 如果执行语句
  132. cmd.CommandText = "Categoriestest1";
  133. // 指定执行语句为存储过程
  134. cmd.CommandType = CommandType.StoredProcedure;
  135. SqlDataAdapter dp = new SqlDataAdapter(cmd);
  136. DataSet ds = new DataSet();
  137. // 填充dataset
  138. dp.Fill(ds);
  139. // 以下是显示效果
  140. GridView1.DataSource = ds;
  141. GridView1.DataBind();
  142. 存储过程Categoriestest1
  143. CREATE PROCEDURE Categoriestest1
  144. AS
  145. select *
  146. from  Categories
  147. GO
  148. 2. 没有输入输出的存储过程
  149. SqlConnection sqlconn = new SqlConnection(conn);
  150. SqlCommand cmd = new SqlCommand();
  151. cmd.Connection = sqlconn;
  152. cmd.CommandText = "Categoriestest2";
  153. cmd.CommandType = CommandType.StoredProcedure;
  154. sqlconn.Open();
  155. // 执行并显示影响行数
  156. Label1.Text = cmd.ExecuteNonQuery().ToString();
  157. sqlconn.Close();
  158. 存储过程Categoriestest2
  159. CREATE PROCEDURE Categoriestest2  AS
  160. insert into dbo.Categories
  161. (CategoryName,[Description],[Picture])
  162. values ('test1','test1',null)
  163. GO
  164. 3. 有返回值的存储过程
  165. SqlConnection sqlconn = new SqlConnection(conn);
  166. SqlCommand cmd = new SqlCommand();
  167. cmd.Connection = sqlconn;
  168. cmd.CommandText = "Categoriestest3";
  169. cmd.CommandType = CommandType.StoredProcedure;
  170. // 创建参数
  171. IDataParameter[] parameters = {
  172. new SqlParameter("rval", SqlDbType.Int,4)
  173. };
  174. // 将参数类型设置为 返回值类型
  175. parameters[0].Direction = ParameterDirection.ReturnValue;
  176. // 添加参数
  177. cmd.Parameters.Add(parameters[0]);
  178. sqlconn.Open();
  179. // 执行存储过程并返回影响的行数
  180. Label1.Text = cmd.ExecuteNonQuery().ToString();
  181. sqlconn.Close();
  182. // 显示影响的行数和返回值
  183. Label1.Text += "-" + parameters[0].Value.ToString() ;
  184. 存储过程Categoriestest3
  185. CREATE PROCEDURE Categoriestest3
  186. AS
  187. insert into dbo.Categories
  188. (CategoryName,[Description],[Picture])
  189. values ('test1','test1',null)
  190. return @@rowcount
  191. GO
  192. 4. 有输入参数和输出参数的存储过程
  193. SqlConnection sqlconn = new SqlConnection(conn);
  194. SqlCommand cmd = new SqlCommand();
  195. cmd.Connection = sqlconn;
  196. cmd.CommandText = "Categoriestest4";
  197. cmd.CommandType = CommandType.StoredProcedure;
  198. // 创建参数
  199. IDataParameter[] parameters = {
  200. new SqlParameter("@Id", SqlDbType.Int,4) ,
  201. new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
  202. };
  203. // 设置参数类型
  204. parameters[0].Direction = ParameterDirection.Output;  // 设置为输出参数
  205. parameters[1].Value = "testCategoryName";
  206. // 添加参数
  207. cmd.Parameters.Add(parameters[0]);
  208. cmd.Parameters.Add(parameters[1]);
  209. sqlconn.Open();
  210. // 执行存储过程并返回影响的行数
  211. Label1.Text = cmd.ExecuteNonQuery().ToString();
  212. sqlconn.Close();
  213. // 显示影响的行数和输出参数
  214. Label1.Text += "-" + parameters[0].Value.ToString() ;
  215. 存储过程Categoriestest4
  216. CREATE PROCEDURE Categoriestest4
  217. @id int output,
  218. @CategoryName nvarchar(15)
  219. AS
  220. insert into dbo.Categories
  221. (CategoryName,[Description],[Picture])
  222. values (@CategoryName,'test1',null)
  223. set  @id = @@IDENTITY
  224. GO
  225. 5. 同时具有返回值、输入参数、输出参数的存储过程
  226. SqlConnection sqlconn = new SqlConnection(conn);
  227. SqlCommand cmd = new SqlCommand();
  228. cmd.Connection = sqlconn;
  229. cmd.CommandText = "Categoriestest5";
  230. cmd.CommandType = CommandType.StoredProcedure;
  231. // 创建参数
  232. IDataParameter[] parameters = {
  233. new SqlParameter("@Id", SqlDbType.Int,4) ,
  234. new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
  235. new SqlParameter("rval", SqlDbType.Int,4)
  236. };
  237. // 设置参数类型
  238. parameters[0].Direction = ParameterDirection.Output;       // 设置为输出参数
  239. parameters[1].Value = "testCategoryName";                  // 给输入参数赋值
  240. parameters[2].Direction = ParameterDirection.ReturnValue;  // 设置为返回值
  241. // 添加参数
  242. cmd.Parameters.Add(parameters[0]);
  243. cmd.Parameters.Add(parameters[1]);
  244. cmd.Parameters.Add(parameters[2]);
  245. sqlconn.Open();
  246. // 执行存储过程并返回影响的行数
  247. Label1.Text = cmd.ExecuteNonQuery().ToString();
  248. sqlconn.Close();
  249. // 显示影响的行数,输出参数和返回值
  250. Label1.Text += "-" + parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();
  251. 存储过程Categoriestest5
  252. CREATE PROCEDURE Categoriestest5
  253. @id int output,
  254. @CategoryName nvarchar(15)
  255. AS
  256. insert into dbo.Categories
  257. (CategoryName,[Description],[Picture])
  258. values (@CategoryName,'test1',null)
  259. set  @id = @@IDENTITY
  260. return @@rowcount
  261. GO
  262. 6. 同时返回参数和记录集的存储过程
  263. SqlConnection sqlconn = new SqlConnection(conn);
  264. SqlCommand cmd = new SqlCommand();
  265. cmd.Connection = sqlconn;
  266. cmd.CommandText = "Categoriestest6";
  267. cmd.CommandType = CommandType.StoredProcedure;
  268. // 创建参数
  269. IDataParameter[] parameters = {
  270. new SqlParameter("@Id", SqlDbType.Int,4) ,
  271. new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
  272. new SqlParameter("rval", SqlDbType.Int,4)                   // 返回值
  273. };
  274. // 设置参数类型
  275. parameters[0].Direction = ParameterDirection.Output;        // 设置为输出参数
  276. parameters[1].Value = "testCategoryName";                   // 给输入参数赋值
  277. parameters[2].Direction = ParameterDirection.ReturnValue;   // 设置为返回值
  278. // 添加参数
  279. cmd.Parameters.Add(parameters[0]);
  280. cmd.Parameters.Add(parameters[1]);
  281. cmd.Parameters.Add(parameters[2]);
  282. SqlDataAdapter dp = new SqlDataAdapter(cmd);
  283. DataSet ds = new DataSet();
  284. // 填充dataset
  285. dp.Fill(ds);
  286. // 显示结果集
  287. GridView1.DataSource = ds.Tables[0];
  288. GridView1.DataBind();
  289. Label1.Text = "";
  290. // 显示输出参数和返回值
  291. Label1.Text +=  parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();
  292. 存储过程Categoriestest6
  293. CREATE PROCEDURE Categoriestest6
  294. @id int output,
  295. @CategoryName nvarchar(15)
  296. AS
  297. insert into dbo.Categories
  298. (CategoryName,[Description],[Picture])
  299. values (@CategoryName,'test1',null)
  300. set  @id = @@IDENTITY
  301. select * from Categories
  302. return @@rowcount
  303. GO
  304. 7. 返回多个记录集的存储过程
  305. SqlConnection sqlconn = new SqlConnection(conn);
  306. SqlCommand cmd = new SqlCommand();
  307. cmd.Connection = sqlconn;
  308. cmd.CommandText = "Categoriestest7";
  309. cmd.CommandType = CommandType.StoredProcedure;
  310. SqlDataAdapter dp = new SqlDataAdapter(cmd);
  311. DataSet ds = new DataSet();
  312. // 填充dataset
  313. dp.Fill(ds);
  314. // 显示结果集1
  315. GridView1.DataSource = ds.Tables[0];
  316. GridView1.DataBind();
  317. // 显示结果集2
  318. GridView2.DataSource = ds.Tables[1];
  319. GridView2.DataBind();
  320. 存储过程Categoriestest7
  321. CREATE PROCEDURE Categoriestest7
  322. AS
  323. select * from Categories
  324. select * from Categories
  325. GO

C#调用存储过程带输出参数或返回值分类(转)相关推荐

  1. C#使用ExecuteReader返回DataReader既有查询结果集又有输出参数或返回值的使用注意事项...

    Command 对象公开了几个可用于执行所需操作的 Execute 方法.当以数据流的形式返回结果时,使用 ExecuteReader 可返回 DataReader 对象.使用 ExecuteScal ...

  2. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  3. php+方法返回多个参数,PHP中调用外部程序,及其参数与返回值

    用了一下午,终于弄明白了如何在PHP代码中调用外部程序. 在PHP中调用外部程序主要有两个函数,system和exec. system的原型为string system(string command ...

  4. mysql 输出参数赋值_【Mysql 调用存储过程,输出参数的坑】

    UIViewContentMode各类型效果 UIViewContentMode   typedef enum {    UIViewContentModeScaleToFill,    UIView ...

  5. Android调用远程Service的参数和返回值都需要实现Parcelable接口

    import android.os.Parcel; import android.os.Parcelable; public class Person implements Parcelable{ p ...

  6. C# 调用存储过程操作 OUTPUT参数和Return返回值

    本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html 存储过程是存放在数据库服务器上的预先编译好的sql语句.使用存 ...

  7. C#操作存储过程,输入参数,返回结果

    C#操作存储过程,输入参数,返回结果 分类: VB和ASP(asp) 2008-08-31 20:57 281人阅读 评论(0) 收藏 举报 SQL存储过程显然是非常强大的,.NET也支持对存储过程的 ...

  8. C#里调用带输出参数的存储过程

    C#里调用带输出参数的存储过程  1using System;  2using System.Collections.Generic;  3using System.Linq;  4using Sys ...

  9. oracle调用存储过程output,vb.net 调用oracle的存储过程的方法(带输入参数 和输出参数或者返回记录集)...

    1.直接调用存储过程 2 是用包的方式调用存储过程 3 调用存储过程且该存储过程返回记录集 这种必须使用包的方式 1.直接调用存储过程 测试存储过程为: create or replace proce ...

最新文章

  1. php读取js验证码,PHP + JS 实现验证码功能
  2. 王海峰发布百度智能云最新架构,推出AI中台和知识中台
  3. C++学习笔记之函数指针
  4. 4500-X启动到“511K bytes of non-volatile configuration memory”,无法继续?
  5. 使用 ftrace 调试 Linux 内核,第 2 部分
  6. 网易云信SDK V3.1.0版本发布啦
  7. Python3.6学习笔记(二)
  8. linux 运行ca.crt,linux下使用openssl生成 csr crt CA证书,opensslcsr
  9. 跨浏览器兼容的HTML5视频音频播放器
  10. 用C#访问Dynamic AX的WebService.
  11. 如何用python获得实时股票信息_【python】用命令行获取实时股票信息
  12. cdn加载插件和npm安装的差别_web开发:打字机效果插件Typed.js
  13. 安利一个React同构渲染脚手架 —— razzle
  14. 技术人应有的职业意识
  15. 关于性格内向者的10个误解,献给奋战在一线的程序员
  16. Maven -- dependency详解
  17. Linux 端口扫描
  18. 用HTML+CSS做一个漂亮简单的轻量级图片相册博客网站(web前端期末大作业)
  19. 立体栅格地图_基于滑动窗口的室内三维立体栅格地图特征点提取方法与流程
  20. C++11之内联名字空间(inline namespace)和ADL特性(Argument-Dependent name Lookup)

热门文章

  1. kafka comsumer消费消息后不commit offset的情况分析
  2. Oracle 11gR2 RSF(Recurive Subquery factoring)
  3. App Store2016年最新审核规则
  4. 【框架】amaze ui学习(一)
  5. 京东云修改Hostname,Centos7修改Hostname
  6. 超酷炫技:10 个牛逼的单行代码编程技巧
  7. 一文概括常用图像处理算法
  8. ktv服务器几套系统,KTV场所需要哪些设备
  9. 浅谈零知识证明之二:简短无交互证明(SNARK)
  10. autojs左右滑动脚本代码_Swiper.js实现移动端元素左右滑动