0

考虑以下代码:

SqlConnection conn = new SqlConnection(@"connection string");

SqlCommand ourCommand = new SqlCommand(String.Format(
    @"SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE '@FL1'"), conn);
ourCommand.CommandTimeout = 6000;

ourCommand.Parameters.AddWithValue("@FL1", TextBox1.Text);

SqlDataAdapter adapter = new SqlDataAdapter(ourCommand);
DataTable dt = new DataTable();

conn.Open();
adapter.Fill(dt);
GridView1.DataSource = dt;

GridView1.DataBind();

问题是它datatable是空的——这意味着命令要么没有执行,要么生成了不正确的查询。我错过了什么?连接和查询有效。不带参数的命令也可以。数据库引擎是 SQL Server 2008 R2

4

6 回答 6

6

您已将参数名称放在引号中,因此它被视为value,而不是参数。试试这个:

"SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE @FL1"

(鉴于您提供的参数比 SQL 中的参数多,我实际上希望您现有的代码会引发异常......)

如评论中所述,您也不需要string.Format

于 2012-08-02T14:43:49.770 回答
5

您的查询不是格式正确的查询。

代替:

String.Format(
    @"SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE '@FL1'")

利用:

"SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE @FL1"

请注意,不需要string.Format, 也不需要将参数名称括在其中,''并且由于字符串中没有任何要转义的内容,因此不需要它是逐字字符串文字(使用@),正如 Jon 评论的那样。

于 2012-08-02T14:44:09.140 回答
3

尝试将行更改为此(删除@FL1 周围的刻度线)

SqlCommand ourCommand=new SqlCommand(
             "SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE @FL1",conn);
于 2012-08-02T14:44:11.500 回答
1

如果使用参数,则不需要使用单引号。看看这里的课。

于 2012-08-02T14:45:02.323 回答
1

好吧,首先,您不需要 string.format 或@'s (您没有转义字符,您的字符串在一行上,并且您没有使用参数化字符串,因此没有任何理由)然后,您不需要 @FL1 周围的引号。SqlCommand 将整个字符串解析为@'s,而不是由引号分隔的子字符串。我相信最终的代码应该是这样的:

SqlCommand ourCommand=new SqlCommand("SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE @FL1",conn);

其他一切我认为你可以保持不变。

于 2012-08-02T14:46:43.330 回答
0

你需要用百分比强制连接%->

SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE **'%'** + @FL1 + **'%'**
于 2014-01-15T18:43:39.613 回答