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