C#执行SQL Server的储存过程命令

一、执行常规SQL语句

SqlConnection conn = new SqlConnection("连接字符串"); 
conn.Open();
//建立连接,并执行sql语句命令
SqlCommand cmd = new SqlCommand(SQLString, conn);
// 执行SQL语句,返回影响的记录数
res = cmd.ExecuteNonQuery();

二、执行储存过程

想执行储存过程命令,需要设置SqlCommand的CommandType类型,CommandType类型有两种:

1、cmd.CommandType = CommandType.Text;

SqlCommand(string cmdText, SqlConnection connection);中cmdText可以是"存储过程名称",也可以是“EXEC 存储过程名称”;CommandType.Text指定类型是SQL文本命令,要求必须符合sql语法,而在SqlServer中存储过程可以不加“EXEC”直接使用存储过程名称执行,也可以在名称前加“EXEC”;

如果存储过程有参数,必须带上参数,输出参数必须用OUTPUT标识,否则返回空值;

示例:

SqlConnection conn = new SqlConnection("连接字符串"); 
conn.Open();
//建立连接,并执行sql语句命令
string sqltxt="EXEC 储存过程名称 N'参数1',参数2,参数3";
SqlCommand cmd = new SqlCommand(sqltxt, conn);
cmd.CommandType = CommandType.Text;
// 执行SQL语句
res = cmd.ExecuteNonQuery();

补充:

ExecuteNonQuery()执行存储过程返回-1的原因:存储过程里设置了set nocount on,意思是打开不计数的开关;设置为set nocount off 就是计数,这样ExecuteNonQuery()就会返回一个大于或等于0的正数。

2、cmd.CommandType = CommandType.StoredProcedure;

SqlCommand(string cmdText, SqlConnection connection);中cmdText只能是“存储过程名称”;CommandType.StoredProcedure指定类型是存储过程名称,所以不能加EXEC,也不能加参数,也不能在存储过程名前出现空白;

    /// <summary>
    /// 存储过程的调用
    /// </summary>
    /// <param name="name">存储过程的名字</param>
    /// <param name="paras">需要传入的参数列表</param>
    /// <returns></returns>
        public DataTable ExecSql(string name, SqlParameter[] paras = null)
        {
            DataTable dt = new DataTable();
            try
            {
                //当连接处于打开状态时关闭,然后再打开,避免有时候数据不能及时更新
                if (conn.State == ConnectionState.Open)
                    conn.Close();
                conn.Open();
                SqlCommand cmd = new SqlCommand(name, conn);
                //给命令对象指定 要执行的是存储过程
                cmd.CommandType = CommandType.StoredProcedure;
                if (paras != null)
                {
                    //将参数列表添加到命令对象的参数列表中
                    cmd.Parameters.AddRange(paras);
                }
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);
            }
            catch (Exception)
            {
            }
            finally
            {
                conn.Close();
            }           
            return dt;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值