执行查询时出错

时间:2014-07-07 12:21:21

标签: c# asp.net sql sql-server webforms

这里是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;
            }

1 个答案:

答案 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参数是否适用于此,尽管我希望它们不会。我同意之前的意见,即需要进行大范围的检查等,以使其可行。

最后,希望这是一个只有少数用户可以访问的内部应用程序。