********************************
使用 C#
调用sqlserver存储过程
********************************
// 1. 创建 存储过程
create procedure proc_name
(
@para1 int,
@para2 varchar(20) output,
@para3 char(2)=default,
...
)
as
--执行的sql语句
go
// 2. 在 C#中 调用存储过程
//1.引入命名空间
using System.Data;
using
System.Data.SqlClient;
//2.创建 数据库 连接字符串
// 使用 sa 身份登录
string connStr = @"Data Source=服务器名;
Initial Catalog=数据库名; User ID=sa; Pwd=数据库_密码";
// 使用 windows身份 登录
string
connStr = @"Data Source=服务器名; Initial Catalog=数据库名; Integrated
Security=true";
//3.创建 sql 命令
string sql = "存储过程名称";
注:调用存储过程时,sql语句是所调用的存储过程的名称,否则就是你要执行的sql语句。
存储过程名称
前后不能有空格,否则报错:不能找到该存储过程。
//4.根据 数据库连接字符串 创建 数据库连接对象
SqlConnection conn = new
SqlConnection(connStr);
//5.根据 数据库连接字符串和连接对象 创建 执行对象
SqlCommand cmd = new
SqlCommand(sql,conn);
//6.设置 执行sql命令 的类型为:存储过程
cmd.CommandType =
CommandType.StoredProcedure;
//7.为 带参数的存储过程 添加参数( 如果没有参数,可以省略 )
SqlParameter[] paras = new
SqlParameter[]
{
// 输入参数
new SqlParameter("@参数名",value),
//
输出参数
new SqlParameter("@参数名",SqlDbType.数据类型,数据长度)
};
// 设置
第二个参数的方向:输出
paras[1].Direction = ParameterDirection.Output;
// 给
cmd(执行对象) 添加参数
cmd.Parameters.AddRange(para); //Add() 添加单个参数,AddRange()
添加多个参数
//8.打开 数据库
conn.Open();
//9.执行 sql命令
// 情况一:返回 存储过程中 *执行所有增、删、改语句* 所受影响的行数
int count =
cmd.ExecuteNonQuery();
// 情况二:返回 存储过程中 *执行第一条查询语句* 所返回的结果集
SqlDataReader dr =
cmd.ExecuteReader();
// 情况三:返回 存储过程中 *执行第一条查询语句* 所返回的第一行第一列的值
object obj =
cmd.ExecuteScalar();
注:上面的 3个方法都会 把存储过程执行完毕,只是返回的结果不同而已。
//10.获取 输出参数的值( 如果没有输出参数,可以省略 )
object obj = paras[1].Value;
// 通过上面声明的SqlParameter[]元素的Value获取
//或者
//
通过cmd.Parameters[1].Value获取
//11.关闭数据库连接资源
注:可以使用 using 实现自动关闭。
注意:实际过程中,还需进行 异常捕获等。如:SQLException
数据库: a、存储过程的参数 可以不用括号括起来。
b、数据类型发生自动类型转换时,会向范围大的那个值的类型进行转换,需注意发生转换异常
如:select ‘123a‘+1
这里1的int类型,范围比‘123a‘的字符型大,所以系统会把‘123a‘
转换成int类型,但是‘123a‘无法转换成int,系统报错。