您的位置:首页 > 数据库

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

2018-04-02 10:39 726 查看
一、创建数据表
下图为表 custom 结构
下图为表 department 结构(id为外键,作为表custom中列 departID的参考列)
二、创建增删查改的存储过程(详细说明)1》手动创建a.打开数据库==》要创建存储过程的数据库==》可编程性==》存储过程b.选中“存储过程”右击 ,在系出现的对话框中选择“新建存储过程”c.在右侧出现的对话框中填写具体存储过程内容完成后执行即可2》使用语句创建(1)创建增加数据的存储过程Create Procedure Addcustom   --全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。  --接收存入表中的数据  @cname nvarchar(50),  @departid int,  @age int,  @ename nvarchar(50),  @password nvarchar(50)  --此处 as 不可以省略不写,指定过程要执行的操作  as   --begin 和 end 是一对,不可以只写其中一个,但可以都不写   --表示复合语句的开始,结束  begin  --执行SQL语句  insert into custom  values   (@cname,@departid,@age,@ename,@password)   end  (2)创建删除数据的存储过程
[sql] view plain copyCreate Procedure Delcustom  @id int  as  begin  delete from custom  where id=@id  end  (3)创建查询数据的存储过程[sql] view plain copyCreate Procedure Checkcustom  --全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。  --接收存入表中的数据  @cname nvarchar(50),  @departname nvarchar(50),  @age int,  @ename nvarchar(50),  @password nvarchar(50)  --此处 as 不可以省略不写,指定过程要执行的操作  as   --begin 和 end 是一对,不可以只写其中一个,但可以都不写   --表示复合语句的开始,结束  begin  --设置局部变量存储查询语句  --局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}  --局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}  --局部变量的显示:select @变量名  declare @sql varchar(MAX)  declare @departid int  set @sql='select * from custom where 1=1'  --根据department中的departname来查询id值并赋给departid  if(@departname !=' ')      set @departid=(select id from department where departname=@departname)  --执行SQL语句  if(@cname !=' ')  --在连接数据库查询语句时,由于与字符串比较时需要加上双引号或单引号,因此需要在变量前后加上'''',否则会出错  --在判断是否为空值时,在sql 中的判断语句为 is not null 但由于在调用过程中无法传null值进来,当空值时赋值' '并判断是否为' '      set @sql = @sql + ' and cname = '+ ''''+ @cname+ ''''  if(@ename !=' ')      set @sql = @sql + ' and ename = '+ '''' + @ename+ ''''  if(@password !=' ')      set @sql = @sql + ' and password = '+ '''' + @password+ ''''  if(@age > 0)  --由于原本类型为int类型不能与字符串进行连接,因此需要使用cast(@age as varchar(10))进行类型转换      set @sql = @sql + ' and age = ' + cast(@age as varchar(10))  if(@departid>0)      set @sql = @sql + ' and departId = ' + cast(@departid as varchar(10))  --执行并返回查询语句的结果  exec(@sql);  end  (4)创建修改数据的存储过程[sql] view plain copyCreate Procedure Altercustom    --全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。  --接收存入表中的数据  @id int,  @cname nvarchar(50),  @departid int,  @age int,  @ename nvarchar(50),  @password nvarchar(50)  --此处 as 不可以省略不写,指定过程要执行的操作  as   --begin 和 end 是一对,不可以只写其中一个,但可以都不写   --表示复合语句的开始,结束  begin  --执行SQL语句  update custom  set cname=@cname,departID=@departid,age=@age,ename=@ename,password=@password  where id=@id  end  
三、调用存储过程
本次调用在VS2015 网页后台中调用(1)引用连接操作数据库头文件using System.Data.SqlClient;using System.Data.Sql;using System.Data;(2)调用增加数据存储过程[sql] view plain copy//创建连接对象conn  SqlConnection conn = new SqlConnection();  //设置连接sql字段(参数为:连接的服务器名 .为本地服务器;连接数据库名;用户名;密码)  conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  //创建调用数据库指令调用存储过程参数为调用的(存储过程名称,连接对象)  SqlCommand cmd = new SqlCommand("Addcustom", conn);  //将指令类型设置为存储过程  cmd.CommandType = CommandType.StoredProcedure;  //设置输入到存储过程的参数(但不能为null,当为null时认为无参数,自定义参数,空值时为"")  string cname,id,ename,password;  int age;  //多值调用  //数据库指令cmd.Parameters中存放参数,只用Add添加多个参数  //SqlDbType设置相应的参数类型  //添加类型后使用.Value属性设置相应的参数值  cmd.Parameters.Add("@cname", SqlDbType.NChar).Value =cname;  cmd.Parameters.Add("@departid", SqlDbType.Int).Value = id;  cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = ename;  cmd.Parameters.Add("@password", SqlDbType.NChar).Value = password;  cmd.Parameters.Add("@age", SqlDbType.Int).Value = age;  //当将参数输入后执行过程  cmd.ExecuteNonQuery();  (3)调用删除存储过程[csharp] view plain copySqlConnection conn = new SqlConnection();  conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  //创建调用数据库指令调用存储过程参数为调用的(存储过程名称,连接对象)  cmd = new SqlCommand("Delcustom", conn);  int id;  //将指令类型设置为存储过程  cmd.CommandType = CommandType.StoredProcedure;  cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;  cmd.ExecuteNonQuery();  (4)调用查询存储过程[csharp] view plain copy//创建连接对象conn  SqlConnection conn = new SqlConnection();  //设置连接sql字段(参数为:连接的服务器名 .为本地服务器;连接数据库名;用户名;密码)  conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  //创建调用数据库指令调用存储过程  SqlCommand cmd = new SqlCommand("Checkcustom", conn);  //将指令类型设置为存储过程  cmd.CommandType = CommandType.StoredProcedure;  string cname,departID,ename,password;  int age;  //将值传入存储过程的参数过程中,如果为判断是否为空时传入null时则认为无参数出错,传入""时在存储过程中无法判断,因此在存储过程中判断是否为" "  //在判断条件输入框是否为空值时,判断是否="",而不判断是否=null  if (cname == "")       cmd.Parameters.Add("@cname", SqlDbType.NChar).Value = " ";  else       cmd.Parameters.Add("@cname", SqlDbType.NChar).Value = cname;  if(ename()=="")       cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = " ";  else       cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = ename;  if(password=="")       cmd.Parameters.Add("@password", SqlDbType.NChar).Value = " ";   else       cmd.Parameters.Add("@password", SqlDbType.NChar).Value = password;  if(departID=="")      cmd.Parameters.Add("@password", SqlDbType.NChar).Value = " ";          else       cmd.Parameters.Add("@departname", SqlDbType.NChar).Value = departID;  cmd.Parameters.Add("@age", SqlDbType.Int).Value = age;cmd.ExecuteNonQuery();  SqlDataAdapter dr = new SqlDataAdapter();  dr.SelectCommand = cmd;DataSet ds = new DataSet();  //创建数据集;dr.Fill(ds);   //填充数据集  this.GridView1.DataSource = ds;GridView1.DataBind();  //将数据源绑定到控件上  (5)调用修改数据存储过程  //创建连接对象conn  SqlConnection conn = new SqlConnection();  //设置连接sql字段(参数为:连接的服务器名 .为本地服务器;连接数据库名;用户名;密码)  conn.ConnectionString = " Data Source =.; Initial Catalog = web; User ID = Jce; Password = 569931614";  //创建调用数据库指令调用存储过程  SqlCommand cmd = new SqlCommand("Altercustom", conn);  //将指令类型设置为存储过程  cmd.CommandType = CommandType.StoredProcedure;  //多值调用  //数据库指令cmd.Parameters中存放参数,只用Add添加多个参数  //SqlDbType.NChar设置相应的参数类型  //添加类型后使用.Value属性设置相应的参数值  string cname,departID,ename,password;  int age,id;  cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;  cmd.Parameters.Add("@cname", SqlDbType.NChar).Value = cname;  cmd.Parameters.Add("@departid", SqlDbType.Int).Value = departID;  cmd.Parameters.Add("@ename", SqlDbType.NChar).Value = ename;  cmd.Parameters.Add("@password", SqlDbType.NChar).Value = password;  cmd.Parameters.Add("@age", SqlDbType.Int).Value = age;cmd.ExecuteNonQuery();    在上述代码中连接数据库的部分是重复的,因此对其进行封装简化代码空字符串和null的区别空字符串:已经分配了存储空间但没有存储内容null:没有分配存储空间[csharp] view plain copy  [plain] view plain copy  
[csharp] view plain copy  [csharp] view plain copy  [csharp] view plain copy  [csharp] view plain copy  [csharp] view plain copy  [csharp] view plain copy  [csharp] view plain copy  [csharp] view plain copy  

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: