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