zoukankan      html  css  js  c++  java
  • C#调用存储过程带输出参数或返回值

    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.   
    14.   
    15. using (SqlConnection conn = new SqlConnection(connStr))  
    16. {  
    17.     try  
    18.     {  
    19.         SqlCommand cmd = new SqlCommand("GetNameById", conn);  
    20.         cmd.CommandType = CommandType.StoredProcedure;  
    21.         cmd.Parameters.AddWithValue("@studentid", "09888888");  //给输入参数赋值  
    22.         SqlParameter parOutput =cmd.Parameters.Add("@studentname", SqlDbType.NVarChar, 50);  //定义输出参数  
    23.         parOutput.Direction = ParameterDirection.Output;  //参数类型为Output  
    24.         SqlParameter parReturn = new SqlParameter("@return", SqlDbType.Int);  
    25.         parReturn.Direction = ParameterDirection.ReturnValue;   //参数类型为ReturnValue                     
    26.         cmd.Parameters.Add(parReturn);  
    27.         conn.Open();  
    28.         cmd.ExecuteNonQuery();  
    29.         MessageBox.Show(parOutput.Value.ToString());   //显示输出参数的值  
    30.         MessageBox.Show(parReturn.Value.ToString());  //显示返回值  
    31.     }  
    32.     catch (System.Exception ex)  
    33.     {  
    34.         MessageBox.Show(ex.Message);  
    35.     }  
    36. }  
    37.   
    38.   
    39. Create PROCEDURE AddOrderTran  
    40.     @country nvarchar(100),  
    41.     @adds nvarchar(100),  
    42.     @ynames nvarchar(100),  
    43.     @pids nvarchar(100),  
    44.     @cellp nvarchar(100),  
    45.     @cphone nvarchar(100),  
    46.     @amounts nvarchar(100),  
    47.     @cartnumber nvarchar(100)  
    48. as  
    49.     Declare @id int  
    50.     BEGIN TRANSACTION     
    51.         insert into Orders(Order_Country,Order_Adress,Order_UserName,Order_PostID,Cells,Order_Phone,Total_pay,CartNumber,IsPay)   
    52.             values (@country,@adds,@ynames,@pids,@cellp,@cphone,@amounts,@cartnumber,'0')  
    53.         Select @id=@@identity  
    54.         insert into Orders_Item (OrderNumber,ProductsID,Products_Color,Products_Price,Order_Qty,Item_Total)   
    55.             select  @id,Carts_Item.ProductsID,Carts_Item.Products_Color,Carts_Item.Products_Price,Carts_Item.Item_Qty,Carts_Item.Total_Pay   
    56.             from Carts_Item where Carts_Item.CartNumber=@cartnumber     
    57.         delete Carts_Item where CartNumber=@cartnumber  
    58.         IF @@error <> 0  --发生错误  
    59.         BEGIN  
    60.             ROLLBACK TRANSACTION  
    61.             RETURN 0  
    62.         END  
    63.         ELSE  
    64.         BEGIN  
    65.             COMMIT TRANSACTION  
    66.             RETURN @id    --执行成功  
    67.     END  
    68.  
    69.  
    70.  
    71.         #region 执行存储过程  
    72.   
    73.         SqlParameter[] param = new SqlParameter[]     
    74.           {     
    75.               new SqlParameter("@country",country),    
    76.               new SqlParameter("@adds",adds),     
    77.               new SqlParameter("@ynames",ynames),     
    78.               new SqlParameter("@pids", pids),     
    79.               new SqlParameter("@cellp",cellp),    
    80.               new SqlParameter("@cphone", cphone),  
    81.               new SqlParameter("@amounts",amounts),  
    82.               new SqlParameter("@cartnumber",cartnumber),  
    83.               new SqlParameter("@return",SqlDbType.Int)  
    84.           };  
    85.         param[8].Direction = ParameterDirection.ReturnValue;  
    86.         MSCL.SqlHelper.RunProcedure("AddOrderTran", param);  
    87.         object obj = param[8].Value; //接受返回值  
    88.   
    89.   
    90.         //string connStr = System.Configuration.ConfigurationManager.AppSettings["ConStr"].ToString();  
    91.         //using (SqlConnection conn = new SqlConnection(connStr))  
    92.         //{  
    93.         //    conn.Open();  
    94.         //    SqlCommand cmd = new SqlCommand("AddOrderTran", conn);  
    95.         //    cmd.CommandType = CommandType.StoredProcedure;  
    96.   
    97.         //    SqlParameter para1 = new SqlParameter("@country", country);  
    98.         //    para1.Direction = ParameterDirection.Input;  //参数方向 为输入参数  
    99.         //    cmd.Parameters.Add(para1);  
    100.   
    101.         //    SqlParameter para2 = new SqlParameter("@adds", adds);  
    102.         //    para2.Direction = ParameterDirection.Input;  
    103.         //    cmd.Parameters.Add(para2);  
    104.   
    105.         //    SqlParameter para3 = new SqlParameter("@ynames", ynames);  
    106.         //    para3.Direction = ParameterDirection.Input;  
    107.         //    cmd.Parameters.Add(para3);  
    108.   
    109.         //    SqlParameter para4 = new SqlParameter("@pids", pids);  
    110.         //    para4.Direction = ParameterDirection.Input;  
    111.         //    cmd.Parameters.Add(para4);  
    112.   
    113.         //    SqlParameter para5 = new SqlParameter("@cellp", cellp);  
    114.         //    para5.Direction = ParameterDirection.Input;  
    115.         //    cmd.Parameters.Add(para5);  
    116.   
    117.         //    SqlParameter para6 = new SqlParameter("@cphone", cphone);  
    118.         //    para6.Direction = ParameterDirection.Input;  
    119.         //    cmd.Parameters.Add(para6);  
    120.   
    121.         //    SqlParameter para7 = new SqlParameter("@amounts", amounts);  
    122.         //    para7.Direction = ParameterDirection.Input;  
    123.         //    cmd.Parameters.Add(para7);  
    124.   
    125.         //    SqlParameter para8 = new SqlParameter("@cartnumber", cartnumber);  
    126.         //    para8.Direction = ParameterDirection.Input;  
    127.         //    cmd.Parameters.Add(para8);  
    128.   
    129.         //    SqlParameter paraReturn = new SqlParameter("@return", SqlDbType.Int);  
    130.         //    paraReturn.Direction = ParameterDirection.ReturnValue;  //参数方向 为返回参数  
    131.         //    cmd.Parameters.Add(paraReturn);  
    132.   
    133.         //    cmd.ExecuteNonQuery();  
    134.   
    135.         //    object obj = paraReturn;  
    136.         //    if (obj.ToString() == "0")  
    137.         //    {  
    138.         //        //存储过程执行失败  
    139.         //    }  
    140.         //    else  
    141.         //    {  
    142.         //        //成功  
    143.         //    }  
    144.         //}  
    145.         //#endregion  
    146.   
    147.   
    148.   
    149. 本文的数据库用的是sql server自带数据Northwind   
    150.    
    151. 1.只返回单一记录集的存储过程  
    152.   
    153. SqlConnection sqlconn = new SqlConnection(conn);  
    154. SqlCommand cmd = new SqlCommand();  
    155. // 设置sql连接  
    156. cmd.Connection = sqlconn;  
    157. // 如果执行语句  
    158. cmd.CommandText = "Categoriestest1";  
    159. // 指定执行语句为存储过程  
    160. cmd.CommandType = CommandType.StoredProcedure;  
    161.   
    162. SqlDataAdapter dp = new SqlDataAdapter(cmd);  
    163. DataSet ds = new DataSet();  
    164. // 填充dataset  
    165. dp.Fill(ds);  
    166. // 以下是显示效果  
    167. GridView1.DataSource = ds;  
    168. GridView1.DataBind();  
    169.   
    170.    
    171.   
    172. 存储过程Categoriestest1  
    173. CREATE PROCEDURE Categoriestest1   
    174.  AS  
    175.  select *   
    176.  from  Categories  
    177.  GO  
    178.   
    179.   
    180.   
    181. 2. 没有输入输出的存储过程  
    182. SqlConnection sqlconn = new SqlConnection(conn);  
    183. SqlCommand cmd = new SqlCommand();  
    184.   
    185. cmd.Connection = sqlconn;  
    186. cmd.CommandText = "Categoriestest2";  
    187. cmd.CommandType = CommandType.StoredProcedure;  
    188. sqlconn.Open();  
    189. // 执行并显示影响行数  
    190. Label1.Text = cmd.ExecuteNonQuery().ToString();  
    191. sqlconn.Close();  
    192.   
    193.   
    194. 存储过程Categoriestest2  
    195.   
    196. CREATE PROCEDURE Categoriestest2  AS  
    197.  insert into dbo.Categories   
    198.  (CategoryName,[Description],[Picture])  
    199.  values ('test1','test1',null)  
    200.  GO  
    201.   
    202.    
    203.   
    204. 3. 有返回值的存储过程  
    205. SqlConnection sqlconn = new SqlConnection(conn);  
    206.          SqlCommand cmd = new SqlCommand();  
    207.          cmd.Connection = sqlconn;  
    208.          cmd.CommandText = "Categoriestest3";  
    209.          cmd.CommandType = CommandType.StoredProcedure;  
    210.          // 创建参数  
    211.         IDataParameter[] parameters = {  
    212.                  new SqlParameter("rval", SqlDbType.Int,4)  
    213.              };  
    214.          // 将参数类型设置为 返回值类型  
    215.         parameters[0].Direction = ParameterDirection.ReturnValue;  
    216.          // 添加参数  
    217.         cmd.Parameters.Add(parameters[0]);  
    218.   
    219.          sqlconn.Open();  
    220.          // 执行存储过程并返回影响的行数  
    221.         Label1.Text = cmd.ExecuteNonQuery().ToString();  
    222.          sqlconn.Close();  
    223.          // 显示影响的行数和返回值  
    224.         Label1.Text += "-" + parameters[0].Value.ToString() ;  
    225.   
    226.   
    227. 存储过程Categoriestest3  
    228.   
    229. CREATE PROCEDURE Categoriestest3  
    230.  AS  
    231.  insert into dbo.Categories   
    232.  (CategoryName,[Description],[Picture])  
    233.  values ('test1','test1',null)  
    234. return @@rowcount  
    235.  GO  
    236.   
    237. 4. 有输入参数和输出参数的存储过程  
    238.   
    239.  SqlConnection sqlconn = new SqlConnection(conn);  
    240.          SqlCommand cmd = new SqlCommand();  
    241.          cmd.Connection = sqlconn;  
    242.          cmd.CommandText = "Categoriestest4";  
    243.          cmd.CommandType = CommandType.StoredProcedure;  
    244.          // 创建参数  
    245.         IDataParameter[] parameters = {  
    246.                  new SqlParameter("@Id", SqlDbType.Int,4) ,  
    247.                  new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,  
    248.              };  
    249.          // 设置参数类型  
    250.         parameters[0].Direction = ParameterDirection.Output;  // 设置为输出参数  
    251.         parameters[1].Value = "testCategoryName";  
    252.          // 添加参数  
    253.         cmd.Parameters.Add(parameters[0]);  
    254.          cmd.Parameters.Add(parameters[1]);  
    255.   
    256.          sqlconn.Open();  
    257.          // 执行存储过程并返回影响的行数  
    258.         Label1.Text = cmd.ExecuteNonQuery().ToString();  
    259.          sqlconn.Close();  
    260.          // 显示影响的行数和输出参数  
    261.         Label1.Text += "-" + parameters[0].Value.ToString() ;  
    262.   
    263. 存储过程Categoriestest4        
    264.   
    265. CREATE PROCEDURE Categoriestest4  
    266.  @id int output,  
    267.  @CategoryName nvarchar(15)  
    268.  AS  
    269.  insert into dbo.Categories   
    270.  (CategoryName,[Description],[Picture])  
    271.  values (@CategoryName,'test1',null)  
    272. set  @id = @@IDENTITY  
    273.  GO  
    274.   
    275.    
    276.   
    277. 5. 同时具有返回值、输入参数、输出参数的存储过程  
    278.   
    279.  SqlConnection sqlconn = new SqlConnection(conn);  
    280.          SqlCommand cmd = new SqlCommand();  
    281.          cmd.Connection = sqlconn;  
    282.          cmd.CommandText = "Categoriestest5";  
    283.          cmd.CommandType = CommandType.StoredProcedure;  
    284.          // 创建参数  
    285.         IDataParameter[] parameters = {  
    286.                  new SqlParameter("@Id", SqlDbType.Int,4) ,  
    287.                  new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,  
    288.                  new SqlParameter("rval", SqlDbType.Int,4)  
    289.              };  
    290.          // 设置参数类型  
    291.         parameters[0].Direction = ParameterDirection.Output;       // 设置为输出参数  
    292.         parameters[1].Value = "testCategoryName";                  // 给输入参数赋值  
    293.         parameters[2].Direction = ParameterDirection.ReturnValue;  // 设置为返回值  
    294.         // 添加参数  
    295.         cmd.Parameters.Add(parameters[0]);  
    296.          cmd.Parameters.Add(parameters[1]);  
    297.          cmd.Parameters.Add(parameters[2]);  
    298.   
    299.          sqlconn.Open();  
    300.          // 执行存储过程并返回影响的行数  
    301.         Label1.Text = cmd.ExecuteNonQuery().ToString();  
    302.          sqlconn.Close();  
    303.          // 显示影响的行数,输出参数和返回值  
    304.         Label1.Text += "-" + parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();  
    305.   
    306.  存储过程Categoriestest5  
    307.   
    308. CREATE PROCEDURE Categoriestest5  
    309.  @id int output,  
    310.  @CategoryName nvarchar(15)  
    311.  AS  
    312.  insert into dbo.Categories   
    313.  (CategoryName,[Description],[Picture])  
    314.  values (@CategoryName,'test1',null)  
    315. set  @id = @@IDENTITY  
    316. return @@rowcount  
    317.  GO  
    318.   
    319.    
    320.  6. 同时返回参数和记录集的存储过程  
    321.     SqlConnection sqlconn = new SqlConnection(conn);  
    322.     SqlCommand cmd = new SqlCommand();  
    323.     cmd.Connection = sqlconn;  
    324.     cmd.CommandText = "Categoriestest6";  
    325.     cmd.CommandType = CommandType.StoredProcedure;  
    326.          // 创建参数  
    327.         IDataParameter[] parameters = {  
    328.                  new SqlParameter("@Id", SqlDbType.Int,4) ,  
    329.                  new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,  
    330.                  new SqlParameter("rval", SqlDbType.Int,4)                   // 返回值  
    331.             };  
    332.          // 设置参数类型  
    333.     parameters[0].Direction = ParameterDirection.Output;        // 设置为输出参数  
    334.     parameters[1].Value = "testCategoryName";                   // 给输入参数赋值  
    335.     parameters[2].Direction = ParameterDirection.ReturnValue;   // 设置为返回值  
    336.     // 添加参数  
    337.     cmd.Parameters.Add(parameters[0]);  
    338.     cmd.Parameters.Add(parameters[1]);  
    339.     cmd.Parameters.Add(parameters[2]);  
    340.   
    341.     SqlDataAdapter dp = new SqlDataAdapter(cmd);  
    342.     DataSet ds = new DataSet();  
    343.     // 填充dataset  
    344.     dp.Fill(ds);  
    345.     // 显示结果集  
    346.     GridView1.DataSource = ds.Tables[0];  
    347.     GridView1.DataBind();  
    348.   
    349.     Label1.Text = "";  
    350.     // 显示输出参数和返回值  
    351.     Label1.Text +=  parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();  
    352.   
    353. 存储过程Categoriestest6  
    354.   
    355. CREATE PROCEDURE Categoriestest6  
    356.  @id int output,  
    357.  @CategoryName nvarchar(15)  
    358.  AS  
    359.  insert into dbo.Categories   
    360.  (CategoryName,[Description],[Picture])  
    361.  values (@CategoryName,'test1',null)  
    362. set  @id = @@IDENTITY  
    363.  select * from Categories  
    364. return @@rowcount  
    365.  GO  
    366.   
    367.   
    368. 7. 返回多个记录集的存储过程  
    369.   
    370. SqlConnection sqlconn = new SqlConnection(conn);  
    371. SqlCommand cmd = new SqlCommand();  
    372.   
    373. cmd.Connection = sqlconn;  
    374. cmd.CommandText = "Categoriestest7";  
    375. cmd.CommandType = CommandType.StoredProcedure;  
    376.   
    377. SqlDataAdapter dp = new SqlDataAdapter(cmd);  
    378. DataSet ds = new DataSet();  
    379. // 填充dataset  
    380. dp.Fill(ds);  
    381. // 显示结果集1  
    382. GridView1.DataSource = ds.Tables[0];  
    383. GridView1.DataBind();  
    384. // 显示结果集2  
    385. GridView2.DataSource = ds.Tables[1];  
    386. GridView2.DataBind();  
    387.   
    388.    
    389. 存储过程Categoriestest7  
    390.   
    391. CREATE PROCEDURE Categoriestest7  
    392.  AS  
    393.  select * from Categories  
    394.  select * from Categories  
    395.  GO  
  • 相关阅读:
    非科班毕业生四个月的面试准备,网易三轮面面试,成功拿下offer(面经奉上)全靠这份阿里面试手册
    太赞了!华为鸿蒙工程师总结的Linux笔记,提供下载
    阿里java岗面试有多难?分享阿里面试真题(附面试专题答案)及P7所要掌握的技能体系!
    阿里腾讯百度等大厂2020秋招面试总结,内附答案
    小小码农的大梦想,2020最新BAT大厂面试题干货总结
    历经三个月的紧张复习,秋招终于进了百度,附上面经分享希望可以帮助大家
    这份《高性能MySQL》适合数据库管理员(DBA)阅读,也适合开发人员参考学习
    这份程序员必备书籍《Spring实战4》,你确定不看看?
    自学JAVA的我提交给2020的问卷答案,JAVA核心知识点分享这一年来的努力并没有白费!
    Delphi连接数据库的两种方式
  • 原文地址:https://www.cnblogs.com/jiangyuxuan/p/5170440.html
Copyright © 2011-2022 走看看