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