以列表作为sql参数的.NET查询 public SqlDataReader GetDataReader(列出参数值){ System.Data.SqlClient.SqlConnection cn=new System.Data.SqlClient.SqlConnection(); cn.ConnectionString=SQLConnectionObj.ConnectionString; cn.Open(); System.Data.SqlClient.SqlCommand cmd=new System.Data.SqlClient.SqlCommand(); cmd.Parameters.AddRange(parameterValues.ToArray()); cmd.Connection=cn; cmd.CommandText=SelectStatement; cmd.CommandType=CommandType.Text; 返回sReader=cmd.ExecuteReader(); }

以列表作为sql参数的.NET查询 public SqlDataReader GetDataReader(列出参数值){ System.Data.SqlClient.SqlConnection cn=new System.Data.SqlClient.SqlConnection(); cn.ConnectionString=SQLConnectionObj.ConnectionString; cn.Open(); System.Data.SqlClient.SqlCommand cmd=new System.Data.SqlClient.SqlCommand(); cmd.Parameters.AddRange(parameterValues.ToArray()); cmd.Connection=cn; cmd.CommandText=SelectStatement; cmd.CommandType=CommandType.Text; 返回sReader=cmd.ExecuteReader(); },sql,asp.net,.net,fortify,Sql,Asp.net,.net,Fortify,当我尝试在select查询中添加这个for IN条件变量时,它失败了。 只需将其用于强化修复。已尝试使用dictionary Sql参数。它可以工作,但会增加问题计数 请帮我做这个。如果你有什么新的东西想添加,也可以随意添加 但以下代码是有效的:- public SqlDataReader GetDataReader(List<SqlParameter> parameterValues){ System.Data.SqlClient.SqlConnection cn = n

当我尝试在select查询中添加这个for IN条件变量时,它失败了。 只需将其用于强化修复。已尝试使用dictionary Sql参数。它可以工作,但会增加问题计数

请帮我做这个。如果你有什么新的东西想添加,也可以随意添加

但以下代码是有效的:-

public SqlDataReader GetDataReader(List<SqlParameter> parameterValues){

    System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection();
    cn.ConnectionString = SQLConnectionObj.ConnectionString;
    cn.Open();
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
    cmd.Parameters.AddRange(parameterValues.ToArray());
    cmd.Connection = cn;
    cmd.CommandText = SelectStatement;
    cmd.CommandType = CommandType.Text;
    return sReader = cmd.ExecuteReader(); 
}
公共SqlDataReader GetDataReader(字典qParams) { SqlCommand SQLCommandObj=新的SqlCommand(SelectStatement, SQLConnectionObj); 字符串查询=SelectStatement; 如果(qParams.Count>0) { foreach(qParams.Keys中的字符串键) { 字符串值=qParams[键]; SqLePARPAR=新的Sql参数(); 参数参数名称=密钥; 票面价值=价值; SQLCommandObj.Parameters.Add(par); } } 参数(Sql参数PAR在Sql命令对象中) { 字符串键=参数参数名称; 字符串值= PAR.Valk作为字符串; query=query.Replace(键、值); } 如果(qParams.Count>0) { SQLCommandObj.CommandText=“”; SQLCommandObj.CommandText=查询; } SQLCommandObj.CommandTimeout=CustomCommandTimeout; 返回SQLCommandObj.ExecuteReader(CommandBehavior.CloseConnection); }
SelectStatement中有什么?@ZoharPeled select查询类似于select*from costs where material in(@material)…并且sql语句中还有多个IN条件。可能的重复代码存在一些问题-首先是您没有关闭或处理任何
IDisposable
实例(
SqlConnection
SqlCommand
,以及
SqlDataReader
都是
IDisposable
)。由于您使用的是.Net和Sql Server,请查看表值参数-在大多数情况下,这是将类似数组的结构传递给Sql Server的最佳实践方法。@ZoharPeled SqlConnection、command和datareader都存在。只需使用该块进行强化即可。。
   public SqlDataReader GetDataReader(Dictionary<string, string> qParams)
    {
    SqlCommand SQLCommandObj = new SqlCommand(SelectStatement, 
    SQLConnectionObj);
     string query=SelectStatement;

    if (qParams.Count > 0)
    {
        foreach (string key in qParams.Keys)
        {
            string value = qParams[key];
            SqlParameter par = new SqlParameter();
            par.ParameterName = key;
            par.Value = value;
            SQLCommandObj.Parameters.Add(par);
          }
    }

    foreach(SqlParameter par in SQLCommandObj.Parameters)
    {
        string key = par.ParameterName;
        string value = par.Value as string;
        query=query.Replace(key, value);
    }
    if (qParams.Count > 0)
    {
        SQLCommandObj.CommandText = "";
        SQLCommandObj.CommandText = query;
    }

    SQLCommandObj.CommandTimeout = CustomCommandTimeout;
    return SQLCommandObj.ExecuteReader(CommandBehavior.CloseConnection);
}