C#SQL字符串格式

时间:2013-11-27 11:51:58

标签: c# .net sql

我是.net/C#的新手。来自PHP和一些Java,我发现新语言很有趣且具有挑战性。

我的sql字符串有问题

string  query = @"select * from Users where role='member' and
SUBSTRinG(lname, 1, 1) = '"+querystring + "' ORDER BY lname ASC";

对我来说,看起来很好。但是当运行我的解决方案并输出查询因为它不起作用时,我将其作为输出:

select * from Users where role='member' and SUBSTRinG(lname, 1, 1) 
= ' O ' ORDER BY lname ASC

这是输出到我的Firebug控制台(使用此查询的页面是通过AJAX访问的)。

他们的原因是我的代码版本,即'&#39'

由于

2 个答案:

答案 0 :(得分:3)

在C#中,你应该使用SqlCommand来执行查询,并使用参数集防止sql注入。

您的查询似乎很好 - 问题可能是您运行它或提供的参数的方式。更新您的问题,详细了解您的期望与发生的事情,包括生成的任何错误消息。

以下是如何将数据从sql表获取到c#Data Table对象的一般准则。

SqlConnection conn = new SqlConnection("YourConnectionString");
SqlCommand cmd = new SqlCommand(@"select * from Users where role='member' and
SUBSTRinG(lname, 1, 1) = @query ORDER BY lname ASC");

cmd.Parameters.AddWithValue("@query", querystring);

DataTable resultTable = new DataTable();

try
{
  SqlDataAdapter da = new SqlDataAdapter(cmd);
  da.Fill(resultTable);
} finally {
  if (conn.State != ConnectionState.Closed) conn.Close();
}

Console.WriteLine(String.Format("Matched {0} Rows.", resultTable.Rows.Count));

答案 1 :(得分:0)

您可以通过放置两个单引号来为单引号提供转义序列,以便在SQL中将其视为单引号。否则,它理解为SQL中特定列值的字符串的开头或结尾。

在.net中使用'替换单引号也是首选,但最好用两个单引号