请考虑以下代码:
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
答案 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 + **'%'**