所以我试图根据两件事删除数据库中的数据。
首先是一个选择列名的combox框,第二个是要删除其行的值。
(@"SELECT * FROM Contacts WHERE " + var + " LIKE " + textBox1.Text + ";");
现在问题在于,只要textBox中的值为数字,此查询就可以正常工作。但是,如果它是字符串值,则查询将失败,因为我没有插入单引号。
无论如何,我只能制作一个统一的查询来处理数字和文本数据。
答案 0 :(得分:2)
好的,我们不要这样做。我们只需要使用参数。
(@"SELECT * FROM Contacts WHERE " + var + " LIKE @" + var + ";");
...
cmd.Parameters.AddWithValue("@" + var, textBox1.Text);
所以整体代码看起来像这样:
string varName = string.Format("@{0}", var);
string sql = string.Format("SELECT * FROM Contacts WHERE {0} LIKE @{0}", var);
using (SqlConnection c = new SqlConnection(cString))
using (SqlCommand cmd = new SqlCommand(sql, c))
{
cmd.Parameters.AddWithValue(varName, textBox1.Text);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
}
另外,请查看this post on my blog。它讨论了我刚刚经历的事情,以及如何安全做LIKE
。
答案 1 :(得分:1)
SqlCommand command = new SqlCommand(
@"SELECT * FROM Contacts WHERE " + var + " LIKE @param", connection));
command.Parameters.AddWithValue("@param", textBox1.Tex);
答案 2 :(得分:0)
您需要在值周围添加引号,以便它接受字符串以及数值
(@"SELECT * FROM Contacts WHERE " + var + " LIKE '" + textBox1.Text + "';");
答案 3 :(得分:0)
这个怎么样:
(@"SELECT * FROM Contacts WHERE " + var + " LIKE " _
+ iif(isnumeric(textBox1.Text),textbox1.text, "'" +textbox1.text +"'" + ";");
这是一个以vb为中心的IIF声明,但它在C#中是等同的。
答案 4 :(得分:-1)
(@"SELECT * FROM Contacts WHERE " + var + " LIKE '" + textBox1.Text + "';");
答案 5 :(得分:-1)
U可以检查其整数或字符串的值,并相应地格式化不同的查询。也可以使用like运算符。
答案 6 :(得分:-1)
String str = Console.ReadLine();
int myval;
String query="";
if(int.TryParse(str,out myval))
query=@"SELECT * FROM Contacts WHERE " + var + " LIKE " + myval + ";";
else
query=@"SELECT * FROM Contacts WHERE " + var + " LIKE '" + str + "';";