分享

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

 酒驾的酒瓶盖 2018-05-28
  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  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多