SQL Server 12存储过程及在VS2015 C#调用自己的存储过程调用过程(详解)

一、创建数据表

下图为表 custom 结构


下图为表 department 结构(id为外键,作为表custom中列 departID的参考列)

二、创建增删查改的存储过程(详细说明)

1》手动创建

a.打开数据库==》要创建存储过程的数据库==》可编程性==》存储过程

b.选中“存储过程”右击 ,在系出现的对话框中选择“新建存储过程”

c.在右侧出现的对话框中填写具体存储过程内容完成后执行即可


2》使用语句创建

(1)创建增加数据的存储过程

  1. Create Procedure Addcustom  
  2.  
  3. --全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。  
  4. --接收存入表中的数据  
  5. @cname nvarchar(50),  
  6. @departid int,  
  7. @age int,  
  8. @ename nvarchar(50),  
  9. @password nvarchar(50)  
  10. --此处 as 不可以省略不写,指定过程要执行的操作  
  11. as  
  12.  --begin 和 end 是一对,不可以只写其中一个,但可以都不写  
  13.  --表示复合语句的开始,结束  
  14. begin  
  15. --执行SQL语句  
  16. insert into custom  
  17. values  
  18.  (@cname,@departid,@age,@ename,@password)  
  19.  end  
(2)创建删除数据的存储过程


  1. Create Procedure Delcustom  
  2. @id int  
  3. as  
  4. begin  
  5. delete from custom  
  6. where id=@id  
  7. end  

(3)创建查询数据的存储过程



  1. Create Procedure Checkcustom  
  2. --全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。  
  3. --接收存入表中的数据  
  4. @cname nvarchar(50),  
  5. @departname nvarchar(50),  
  6. @age int,  
  7. @ename nvarchar(50),  
  8. @password nvarchar(50)  
  9. --此处 as 不可以省略不写,指定过程要执行的操作  
  10. as  
  11.  --begin 和 end 是一对,不可以只写其中一个,但可以都不写  
  12.  --表示复合语句的开始,结束  
  13. begin  
  14. --设置局部变量存储查询语句  
  15. --局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}  
  16. --局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}  
  17. --局部变量的显示:select @变量名  
  18. declare @sql varchar(MAX)  
  19. declare @departid int  
  20. set @sql='select * from custom where 1=1'  
  21. --根据department中的departname来查询id值并赋给departid  
  22. if(@departname !=' ')  
  23.     set @departid=(select id from department where departname=@departname)  
  24. --执行SQL语句  
  25. if(@cname !=' ')  
  26. --在连接数据库查询语句时,由于与字符串比较时需要加上双引号或单引号,因此需要在变量前后加上'''',否则会出错  
  27. --在判断是否为空值时,在sql 中的判断语句为 is not null 但由于在调用过程中无法传null值进来,当空值时赋值' '并判断是否为' '  
  28.     set @sql = @sql + ' and cname = '''''+ @cname+ ''''  
  29. if(@ename !=' ')  
  30.     set @sql = @sql + ' and ename = ''''' + @ename+ ''''  
  31. if(@password !=' ')  
  32.     set @sql = @sql + ' and password = ''''' + @password''''  
  33. if(@age > 0)  
  34. --由于原本类型为int类型不能与字符串进行连接,因此需要使用cast(@age as varchar(10))进行类型转换  
  35.     set @sql = @sql + ' and age = ' + cast(@age as varchar(10))  
  36. if(@departid>0)  
  37.     set @sql = @sql + ' and departId = ' + cast(@departid as varchar(10))  
  38. --执行并返回查询语句的结果  
  39. exec(@sql);  
  40. end  


(4)创建修改数据的存储过程

  1. Create Procedure Altercustom  
  2.   
  3. --全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。  
  4. --接收存入表中的数据  
  5. @id int,  
  6. @cname nvarchar(50),  
  7. @departid int,  
  8. @age int,  
  9. @ename nvarchar(50),  
  10. @password nvarchar(50)  
  11. --此处 as 不可以省略不写,指定过程要执行的操作  
  12. as  
  13.  --begin 和 end 是一对,不可以只写其中一个,但可以都不写  
  14.  --表示复合语句的开始,结束  
  15. begin  
  16. --执行SQL语句  
  17. update custom  
  18. set cname=@cname,departID=@departid,age=@age,ename=@ename,password=@password  
  19. where id=@id  
  20. end  
三、调用存储过程

本次调用在VS2015 网页后台中调用

(1)引用连接操作数据库头文件

using System.Data.SqlClient; using System.Data.Sql; using System.Data;

(2)调用增加数据存储过程

  1. //创建连接对象conn  
  2. SqlConnection conn = new SqlConnection();  
  3. //设置连接sql字段(参数为:连接的服务器名 .为本地服务器;连接数据库名;用户名;密码)  
  4. conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  
  5. //创建调用数据库指令调用存储过程参数为调用的(存储过程名称,连接对象)  
  6. SqlCommand cmd = new SqlCommand("Addcustom", conn);  
  7. //将指令类型设置为存储过程  
  8. cmd.CommandType = CommandType.StoredProcedure;  
  9. //设置输入到存储过程的参数(但不能为null,当为null时认为无参数,自定义参数,空值时为"")  
  10. string cname,id,ename,password;  
  11. int age;  
  12. //多值调用  
  13. //数据库指令cmd.Parameters中存放参数,只用Add添加多个参数  
  14. //SqlDbType设置相应的参数类型  
  15. //添加类型后使用.Value属性设置相应的参数值  
  16. cmd.Parameters.Add("@cname", SqlDbType.NChar).Value =cname;  
  17. cmd.Parameters.Add("@departid", SqlDbType.Int).Value = id;  
  18. cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = ename;  
  19. cmd.Parameters.Add("@password", SqlDbType.NChar).Value = password;  
  20. cmd.Parameters.Add("@age", SqlDbType.Int).Value = age;  
  21. //当将参数输入后执行过程  
  22. cmd.ExecuteNonQuery();  
(3)调用删除存储过程

[csharp] view plain copy
  1. SqlConnection conn = new SqlConnection();  
  2. conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  
  3. //创建调用数据库指令调用存储过程参数为调用的(存储过程名称,连接对象)  
  4. cmd = new SqlCommand("Delcustom", conn);  
  5. int id;  
  6. //将指令类型设置为存储过程  
  7. cmd.CommandType = CommandType.StoredProcedure;  
  8. cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;  
  9. cmd.ExecuteNonQuery();  

(4)调用查询存储过程

[csharp] view plain copy
  1. //创建连接对象conn  
  2. SqlConnection conn = new SqlConnection();  
  3. //设置连接sql字段(参数为:连接的服务器名 .为本地服务器;连接数据库名;用户名;密码)  
  4. conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  
  5. //创建调用数据库指令调用存储过程  
  6. SqlCommand cmd = new SqlCommand("Checkcustom", conn);  
  7. //将指令类型设置为存储过程  
  8. cmd.CommandType = CommandType.StoredProcedure;  
  9. string cname,departID,ename,password;  
  10. int age;  
  11. //将值传入存储过程的参数过程中,如果为判断是否为空时传入null时则认为无参数出错,传入""时在存储过程中无法判断,因此在存储过程中判断是否为" "  
  12. //在判断条件输入框是否为空值时,判断是否="",而不判断是否=null  
  13. if (cname == "")   
  14.     cmd.Parameters.Add("@cname", SqlDbType.NChar).Value = " ";  
  15. else   
  16.     cmd.Parameters.Add("@cname", SqlDbType.NChar).Value = cname;  
  17. if(ename()=="")   
  18.     cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = " ";  
  19. else   
  20.     cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = ename;  
  21. if(password=="")   
  22.     cmd.Parameters.Add("@password", SqlDbType.NChar).Value = " ";   
  23. else   
  24.     cmd.Parameters.Add("@password", SqlDbType.NChar).Value = password;  
  25. if(departID=="")  
  26.     cmd.Parameters.Add("@password", SqlDbType.NChar).Value = " ";          
  27. else   
  28.     cmd.Parameters.Add("@departname", SqlDbType.NChar).Value = departID;  
  29. cmd.Parameters.Add("@age", SqlDbType.Int).Value = age;cmd.ExecuteNonQuery();  
  30. SqlDataAdapter dr = new SqlDataAdapter();  
  31. dr.SelectCommand = cmd;DataSet ds = new DataSet();  
  32. //创建数据集;dr.Fill(ds);   
  33. //填充数据集  
  34. this.GridView1.DataSource = ds;GridView1.DataBind();  
  35. //将数据源绑定到控件上  
  36. (5)调用修改数据存储过程  
  37. //创建连接对象conn  
  38. SqlConnection conn = new SqlConnection();  
  39. //设置连接sql字段(参数为:连接的服务器名 .为本地服务器;连接数据库名;用户名;密码)  
  40. conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  
  41. //创建调用数据库指令调用存储过程  
  42. SqlCommand cmd = new SqlCommand("Altercustom", conn);  
  43. //将指令类型设置为存储过程  
  44. cmd.CommandType = CommandType.StoredProcedure;  
  45. //多值调用  
  46. //数据库指令cmd.Parameters中存放参数,只用Add添加多个参数  
  47. //SqlDbType.NChar设置相应的参数类型  
  48. //添加类型后使用.Value属性设置相应的参数值  
  49. string cname,departID,ename,password;  
  50. int age,id;  
  51. cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;  
  52. cmd.Parameters.Add("@cname", SqlDbType.NChar).Value = cname;  
  53. cmd.Parameters.Add("@departid", SqlDbType.Int).Value = departID;  
  54. cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = ename;  
  55. cmd.Parameters.Add("@password", SqlDbType.NChar).Value = password;  
  56. cmd.Parameters.Add("@age", SqlDbType.Int).Value = age;cmd.ExecuteNonQuery();    

在上述代码中连接数据库的部分是重复的,因此对其进行封装简化代码 空字符串和null的区别 空字符串:已经分配了存储空间但没有存储内容 null:没有分配存储空间

[csharp] view plain copy
  1.   
[plain] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   
[csharp] view plain copy
  1.   

                                    
发布了2 篇原创文章 · 获赞 3 · 访问量 5698
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览