首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

存储过程兑现执行带参数的SQL语句

2013-02-28 
存储过程实现执行带参数的SQL语句请问存储过程如何实现执行带参数的SQL语句?string[] list 参数集合for

存储过程实现执行带参数的SQL语句
请问存储过程如何实现执行带参数的SQL语句?


string[] list = 参数集合;
for (int i = 0; i < list.Length; i++)
    {

        result = string.Format("@Param_{0}_{1}",sign, i);//拼接的SQL语句
        ......
        Parameters.Add(
             new SqlParameter(string.Format("@Param_{0}_{1}",sign, i), SqlDbType.NVarChar) { Value = list[i].Trim() }
        );//对应的参数
    }

以前是直接执行SQL,传sql语句,传参数就行了。
现在是把这些SQL语句传到存储过程中进行某些处理后再执行,
存储过程如何接收这样参数?
比如:
拼好的语句

Select * from tempTable where Col1 = @col1 and Col2 = @col2;

 @col1 , @col2我该如何传给存储过程?

还是说,我直接把值赋好。

Select * from tempTable where Col1 = 'col1' and Col2 = 'col2';

这样的话貌似又不安全。

[解决办法]
使用字符串拼接就可以实现,而且很安全
[解决办法]
SqlParameter proid = new SqlParameter("@id", SqlDbType.Int);
            proid.Value = id;
            SqlParameter proFea = new SqlParameter("@feature", SqlDbType.VarChar, -1);
            proFea.Direction = ParameterDirection.Output;
            SqlParameter[] numbers = new SqlParameter[2] { proid, proFea };

            DataSet ds = SqlHelper.ExecuteReaderFill(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "GetProduct", numbers);


 public static DataSet ExecuteReaderFill(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);

            // 在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,
            //CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。
            //关闭数据库连接,并通过throw再次引发捕捉到的异常。
            try
            {
                DataSet ds = new DataSet();
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);


                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                adapter.Fill(ds);
                //SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                conn.Close();
                return ds;
            }
            catch
            {
                conn.Close();
                throw;
            }
        }

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {

            //判断数据库连接状态
            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;

            //判断是否需要事物处理
            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null)
            {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
[解决办法]
写个存储过程吧。
[解决办法]
你那个已经是存储过程了,储存过程只传入参数,检查参数在客户端代码,例如使用SqlParamter,或者自己写排除函数。这样就很安全
[解决办法]
存储过程兑现执行带参数的SQL语句
[解决办法]
打打酱油路过···看楼上大神回复

热点排行