使用 IN 关键字 c# 参数化查询

潘卡伊

我在一个没有编写参数化 Sql 查询的应用程序中。下面是代码块

  public List<MyClass> GetData(int Id, IEnumerable<string> state)
    {
        using (var dataContext = new DataContext(_connectionString)) 
            {
            var query = new StringBuilder("SELECT * FROM table");
            query.Append(" Id = ");
            query.Append(Id);
            query.Append(" AND state IN ('");
            query.Append(string.Join("','", state));
            query.Append("')");

            return dataContext.ExecuteQuery<MyClass>(query.ToString()).ToList();
     }

我正在使用参数化查询重构代码,如下所示:

    public List<MyClass> GetData(int Id, IEnumerable<string> state)
    {
      using (var dataContext = new DataContext(_connectionString)) 
        {
            var statestring = new StringBuilder("'");
            statestring.Append(string.Join("','", state));
            statestring.Append("'");
             string myStates= statestring.ToString();
            string query = "SELECT * FROM table WHERE Id ={0} AND state IN ({1})";
            return dataContext.ExecuteQuery<MyClass>(query, new object[] {Id, myStates}).ToList();
         }
     }

我没有得到有关运行此查询的数据。在调试时,我发现我的查询是这样形成的

  SELECT * FROM table WHERE Id ={0} AND state IN ({1}) where in ({1}) 

对于状态,我将数据视为“'错误'、'警告'”。在 sql server 中,我像这样运行查询

   SELECT * FROM table   WHERE Id =34 AND state IN ('error','warning').

我需要删除 mystate 周围的“”吗?我尝试使用修剪方法删除 " 并将其分配回字符串,但它没有用。我仍然可以看到双引号。

  myStates = myStates.trim('"');

如何在不使用任何字符串生成器的情况下更好地参数化我的查询

克里斯·詹森

要参数化 in 子句,每个 case 都必须是一个单独的参数。所以 in 子句必须反映这一点。

看到这个类似的问题:How to pass sqlparameter to IN()?

public List<MyClass> GetData(int Id, IEnumerable<string> state)
{
    using (var dataContext = new DataContext(_connectionString))
    {
        var stateParameterNumbers = Enumerable.Range(1, state.Count())
            .Select(i => string.Format("{{{0}}}", i));

        var stateParameterString = string.Join(",", stateParameterNumbers);

        string query = "SELECT * FROM table WHERE Id ={0} AND state IN (" + stateParameterString + ")";
        return dataContext.ExecuteQuery<MyClass>(query, new object[] { Id }.Concat(state).ToArray()).ToList();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用IN关键字查询

来自分类Dev

在C ++中使用C关键字

来自分类Dev

C#使用关键字的范围

来自分类Dev

C++ - “使用”关键字澄清

来自分类Dev

JSON 使用 C# 关键字

来自分类Dev

使用关键字别名的Firebird查询

来自分类Dev

使用超长关键字查询

来自分类Dev

使用ALL关键字的MySQL查询

来自分类Dev

如何使用“ this”关键字作为参数?

来自分类Dev

使用关键字作为C函数参数或C ++模板参数

来自分类Dev

在WebBrowser C#中使用'this'关键字作为参数执行javascript函数

来自分类Dev

在 Cython 的(C 可调用)cdef 方法中使用可选(关键字)参数

来自分类Dev

没有新关键字且使用指针的C ++对象初始化

来自分类Dev

C ++初始化使用“ new”关键字分配的结构的对象成员

来自分类Dev

如何在C ++中使用关键字delete删除特定的模板专业化

来自分类Dev

C ++在成员初始化列表中使用'this'关键字

来自分类Dev

对于此查询,使用Join关键字或不使用Join关键字哪个更好

来自分类Dev

使用SOQL使用LIKE语句/关键字查询身份

来自分类Dev

有关使用C ++的“ const”关键字的建议

来自分类Dev

在C#中使用`dynamic`关键字无法编译

来自分类Dev

在数组C ++中使用删除关键字

来自分类Dev

替换不推荐使用的注册关键字C ++ 11

来自分类Dev

是否可以在C ++中强制使用“ this”关键字?

来自分类Dev

如何在C ++中使用“ in”关键字

来自分类Dev

在C#中使用`dynamic`关键字无法编译

来自分类Dev

在C#中使用Volatile关键字

来自分类Dev

有关使用C ++的“ const”关键字的建议

来自分类Dev

在不同的类C#中使用“ this”关键字

来自分类Dev

如何在C中刺激使用register关键字?

Related 相关文章

热门标签

归档