SqlCommand参数无法正常工作

时间:2012-08-02 14:40:33

标签: c# asp.net sql-server database

请考虑以下代码:

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

6 个答案:

答案 0 :(得分:6)

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

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

(我实际上希望你的现有代码抛出异常,因为你提供的参数比SQL中的参数多......)

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

答案 1 :(得分: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所评论的那样。

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

如果使用参数,则无需使用单引号。 请查看课程here

答案 4 :(得分:1)

嗯,首先,你不需要string.format或@(你没有转义字符,你的字符串在一行上,你没有使用参数化字符串,所以有没有理由任何一个)那么,你不需要@ FL1 周围的引号。 SqlCommand解析@的整个字符串,而不是由引号分隔的子字符串。我相信最终的代码应该是这样的:

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

我认为你可以保持不变的其他所有。

答案 5 :(得分:0)

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

SELECT Field1,Field2,Field3 FROM Tbl WHERE Field1 LIKE **'%'** + @FL1 + **'%'**