【问题标题】:SqlDataAdapter: Empty resultSqlDataAdapter:空结果
【发布时间】:2013-08-13 11:36:00
【问题描述】:

我编写了这个小函数来对 SQL Server 2005 数据库进行查询:

public DataSet Query(string query, Dictionary<string, string> parameters)
{
    DataSet result = new DataSet();

    using (SqlDataAdapter adapter = new SqlDataAdapter(query, sqlConnection))
    {
        adapter.SelectCommand.CommandType = CommandType.Text;
        adapter.SelectCommand.CommandText = query;
        foreach (KeyValuePair<string, string> pair in parameters)
        {
            adapter.SelectCommand.Parameters.Add(pair.Key, SqlDbType.Text).Value = pair.Value;
        }
        adapter.Fill(result);
    }

    return result;
}

当我这样称呼它时:

Query("SELECT * FROM Database.Tab.le WHERE somecol LIKE '%1%'", new Dictionary<string, string>() {  });

我得到了很多结果。但我想要的是这样称呼它:

Query("SELECT * FROM Database.Tab.le WHERE somecol LIKE '@number'", new Dictionary<string, string>() { {"@number", "%1%"}  });

然而,这会返回零行。我想知道为什么以及如何解决它。

【问题讨论】:

  • {"number", "%1%"} 更改为 {"@number", "%1%"} - 你忘记了 @ 符号。

标签: c# sql sql-server sql-server-2005


【解决方案1】:

当您将parameter 传递给此查询时,您传递给它的数字可能是数据库中的not exists

在使用%1% 直接查询时,它肯定会为您提供DB 中以1 开头或preceded or followed 开头的所有数字。(如果确实存在此类记录)

或尝试关注

Query("SELECT * FROM Database.Tab.le WHERE somecol LIKE @number", new Dictionary<string, string>() { {"@number", "%1%"}  });

【讨论】:

  • OP 表示当值在查询中硬编码时他正在获取结果;只有在尝试使用参数时才返回 0 结果 - 因为参数的值没有被拾取。
【解决方案2】:

下面试试

Query("SELECT * FROM Database.Tab.le WHERE somecol LIKE @number", new Dictionary<string, string>() { {"@number", "%1%"}  });

(将sql中的'@number'更改为@number并给出参数为@number

【讨论】:

  • @jgillich 请注意,LIKE '@number'LIKE @number 之间有很大的不同
【解决方案3】:

好的,您需要更改代码以使用 SqlParameter 对象。例如:

public DataSet Query(string query, Dictionary<string, string> parameters)
{
    DataSet result = new DataSet();

    using (SqlDataAdapter adapter = new SqlDataAdapter(query, sqlConnection))
    {
        adapter.SelectCommand.CommandType = CommandType.Text;
        adapter.SelectCommand.CommandText = query;
        foreach (KeyValuePair<string, string> pair in parameters)
        {
            //THIS BIT IS IMPORTANT, NOTE THE STRING FORMAT!
            adapter.SelectCommand.Parameters.Add(new SqlParameter(string.Format("@{0}", pair.Key), pair.Value));
        }
        adapter.Fill(result);
    }
    return result;
}

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多