执行Query包含字符串而不使用引号

时间:2013-11-21 11:32:23

标签: c# .net sql sql-server tsql

所以我试图根据两件事删除数据库中的数据。

首先是一个选择列名的combox框,第二个是要删除其行的值。

(@"SELECT * FROM Contacts WHERE " + var + " LIKE " + textBox1.Text + ";");

现在问题在于,只要textBox中的值为数字,此查询就可以正常工作。但是,如果它是字符串值,则查询将失败,因为我没有插入单引号。

无论如何,我只能制作一个统一的查询来处理数字和文本数据。

7 个答案:

答案 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)

尝试使用parameterized query

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 + "';";