这里是C#的代码片段。我正在尝试生成数据摘要并在asp.net中的formview中显示。但是这个代码有问题产生错误
'Incorrect syntax near 'K12'.'
请帮帮我。
try
{
SqlConnection conn = new SqlConnection("server=ARSLAN- LAPI\\SQLEXPRESS;" +
"Trusted_Connection=yes;" +
"database=OTTS; " +
"connection timeout=30");
String query = "Select * FROM dbo.";
query = query + " " + "[" + session.SelectedItem.Text + "_" + dept.SelectedItem.Text + "]";
query = query + " " + "WHERE rollNo=" + "2K12-BSCS-37";
//SqlCommand cmd = new SqlCommand(query, conn);
//SqlDataReader reader;
SqlDataAdapter dataAdapter = new SqlDataAdapter(query, conn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
dataAdapter.Fill(table);
dataform.DataSource = table;
dataform.Visible = true;
}
catch (SqlException ex)
{
ErrorMessage.Text="Error ::"+ ex.Message;
}
答案 0 :(得分:-1)
where子句中的roll number字符串需要以字符串的形式分隔。此行query = query + " " + "WHERE rollNo=" + "2K12-BSCS-37";
应替换为query += " " + "WHERE rollNo=" + "'2K12-BSCS-37'";
请注意单引号。
更好的方法是使用字符串格式来构建查询,如下所示:
string.Format("SELECT * FROM dbo.[{0}_{1}] WHERE rollNo = '{2}'",
session.SelectedItem.Text,
dept.SelectedItem.Text,
"2K12-BSCS-37")
更好的仍然将完全避免这种危险的查询,因为它会将您的数据库暴露给多种可能的攻击。老老实实,我从不让用户以这种方式构建自己的表名,所以我甚至不能说SQLClient参数是否适用于此,尽管我希望它们不会。我同意之前的意见,即需要进行大范围的检查等,以使其可行。
最后,希望这是一个只有少数用户可以访问的内部应用程序。