我是.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'
由于
答案 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中使用'
替换单引号也是首选,但最好用两个单引号