SqlDataAdapter给我0结果

时间:2013-02-10 19:14:12

标签: c# sql winforms datatable sqldataadapter

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd = CreateParameterizedQuery();
SqlDataAdapter dap = new SqlDataAdapter();
dap.SelectCommand = cmd;
DataTable tbl = new DataTable();
dap.Fill(tbl);
if (tbl.Rows.Count > 0)
{
    grid.DataSource = tbl;
}

实际的SQL Query将在SQL Management Studio中生成结果。但是我得到0行数据。我在tbl.Rows.Count上设置了一个断点,我看到它为0并且步进将跳过设置DataSource所需的代码。

    private SqlCommand CreateParameterizedQuery()
    {
        SqlCommand command = new SqlCommand();
        string[] allTheseWords;
        if (textBoxAllTheseWords.Text.Length > 0)
        {
            allTheseWords = textBoxAllTheseWords.Text.Split(' ');
            string SQLQuery = "SELECT distinct [databaseName].[dbo].[customerTable].[name], [databaseName].[dbo].[customerTable].[dos], [databaseName].[dbo].[customerTable].[ACC], [databaseName].[dbo].[reportTable].[id], [databaseName].[dbo].[reportTable].[ACC], [databaseName].[dbo].[reportTable].[fullreport] FROM [databaseName].[dbo].[reportTable], [databaseName].[dbo].[customerTable] WHERE ";
            int i = 0;
            foreach (string word in allTheseWords)
            {
                var name = "@word" + (i++).ToString();
                command.Parameters.AddWithValue(name, "'%" + word + "%'");
                SQLQuery = SQLQuery + String.Format(" [databaseName].[dbo].[reportTable].[fullreport] LIKE {0} AND ", name);
            }
            SQLQuery = SQLQuery + " [databaseName].[dbo].[customerTable].[ACC] = [databaseName].[dbo].[reportTable].[ACC]";
            command.CommandText = SQLQuery;
        }
        return command;
    }

我在Windows 8上使用WinForm和C#。


SQLQuery变量在调试时包含此数据

SELECT distinct [databaseName].[dbo].[customerTable].[name], [databaseName].[dbo].[customerTable].[dos], [databaseName].[dbo].[customerTable].[ACC], [databaseName].[dbo].[reportTable].[customerID], [databaseName].[dbo].[reportTable].[ACC], [databaseName].[dbo].[reportTable].[fullreport] FROM [databaseName].[dbo].[reportTable], [databaseName].[dbo].[customerTable] WHERE  [databaseName].[dbo].[reportTable].[fullreport] LIKE @word0 AND  [databaseName].[dbo].[customerTable].[ACC] = [databaseName].[dbo].[reportTable].[ACC]

debugMySQL是一个使用替换参数

来吐出SQL查询的方法
    public void debugMySQL()
    {
        string query = command.CommandText;
        foreach (SqlParameter p in command.Parameters)
        {
            query = query.Replace(p.ParameterName, p.Value.ToString());
        }
        textBox1.Text = query;
    }

输出看起来像

SELECT distinct [databaseName].[dbo].[customerTable].[name], [databaseName].[dbo].[customerTable].[dos], [databaseName].[dbo].[customerTable].[ACC], [databaseName].[dbo].[reportTable].[id], [databaseName].[dbo].[reportTable].[ACC], [databaseName].[dbo].[reportTable].[fullreport] FROM [databaseName].[dbo].[reportTable], [databaseName].[dbo].[customerTable] WHERE  [databaseName].[dbo].[reportTable].[fullreport] LIKE '%single%' AND  [databaseName].[dbo].[customerTable].[ACC] = [databaseName].[dbo].[reportTable].[ACC]

1 个答案:

答案 0 :(得分:2)

您可以使用SQL Profiler查看参数化查询及其参数值。

enter image description here