无法执行查询 - 错误:“媒体”附近的语法不正确

时间:2014-05-07 11:52:34

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

此代码显示错误:

  

媒体'

附近的语法不正确

这是什么意思?我在哪里弄错了?

if (!IsPostBack)
{
    if (Request.QueryString["sub"] != null)
    {
        SqlDataAdapter da = new SqlDataAdapter(
            "select * from entry_table Where sub=" + Request.QueryString["sub"],
            ConfigurationManager.ConnectionStrings["cozmotestConnectionString"].ConnectionString);

        DataTable dt = new DataTable();
        da.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            Label1.Text = dt.Rows[0]["sub"].ToString();
            Label2.Text = dt.Rows[0]["body"].ToString();
        }
    }
}

<div style=" padding-bottom:10px"><h1><asp:Label Font-Bold="true" ID="Label1" runat="server" Text="Label"></asp:Label></h1></div>

<div><asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></div>

3 个答案:

答案 0 :(得分:3)

由于您已将问题标记为,因此我认为您的sub列为nvarchar

这就是为什么你需要使用单引号和它的值。等;

..sub = '" + Request.QueryString["sub"] + "'"..

但不要这样使用。

更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

使用using statement来处理您的SqlConnectionSqlCommandSqlDataAdapter

using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cozmotestConnectionString"].ConnectionString))
using(SqlCommand cmd = con.CreateCommand())
{
    cmd.CommandText = "select * from entry_table Where sub = @sub";
    cmd.Parameters.Add("@sub", SqlDbType.NVarChar).Value = Request.QueryString["sub"];
    using(SqlDataAdapter da = new SqlDataAdapter(cmd, con))
    {
         DataTable dt = new DataTable();
         da.Fill(dt);

         if (dt.Rows.Count > 0)
         {
             Label1.Text = dt.Rows[0]["sub"].ToString();
             Label2.Text = dt.Rows[0]["body"].ToString();
         }
    } 
}

答案 1 :(得分:0)

您可能需要在where子句中使用单引号。

SqlDataAdapter da = new SqlDataAdapter("select * from entry_table Where sub='" + Request.QueryString["sub"] + "'", ConfigurationManager.ConnectionStrings["cozmotestConnectionString"].ConnectionString);

虽然,我强烈建议您使用参数化查询来避免SQL注入攻击

答案 2 :(得分:0)

做这样的事情,它可以帮助你解决这个问题,

string str = Request.QueryString["sub"];
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cozmotestConnectionString"].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(
        "select * from entry_table Where sub='"+str+"'",con)
//Your remaining parts will come here

请让我知道结果。