'nvarchar'附近的语法不正确。 SQL Server错误

时间:2013-11-21 06:53:41

标签: c# sql sql-server

我正在尝试使用查询字符串输入数据。我的代码是

    protected void Page_Load(object sender, EventArgs e)
    {
      //  insertData();
        if (!String.IsNullOrWhiteSpace(Request.QueryString["SChn"]))
            {
                if (!String.IsNullOrWhiteSpace(Request.QueryString["PAN"]))
                    {
                        if (!String.IsNullOrWhiteSpace(Request.QueryString["STag"]))
                            {
                                if (!String.IsNullOrWhiteSpace(Request.QueryString["MAC"]))
                                    {
                                        insertData1();
                                    }
                             }
                    }
            }
    }
        //   else
        //  {
        //         Response.Redirect("http://localhost:53627/Default.aspx");
        //   }



    public void insertData1()
    {
        using (SqlConnection con = new SqlConnection(GetConnectionString()))
        {
            con.Open();
            try
            {
                using (SqlCommand cmd = new SqlCommand("INSERT INTO SensorConfig(SChn, PAN, STag, MAC) VALUES(@SChn, @PAN, @STag, @MAC)", con))
                {

                    cmd.Parameters.Add(new SqlParameter("SChn", Request.QueryString["SChn"].Trim()));
                    cmd.Parameters.Add(new SqlParameter("PAN", Request.QueryString["PAN"].Trim()));
                    cmd.Parameters.Add(new SqlParameter("STag", Request.QueryString["STag"].Trim()));
                    cmd.Parameters.Add(new SqlParameter("MAC", Request.QueryString["MAC"].Trim()));
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception Ex)
            {
                // Console.WriteLine("Unable To Save Data. Error - " + Ex.Message);
                Response.Write("Unable To Save Data. Error - " + Ex.Message);
            }
        }

    }
    public string GetConnectionString()
    {
        //sets the connection string from the web config file "ConnString" is the name of the Connection String
        return System.Configuration.ConfigurationManager.ConnectionStrings["MyConsString"].ConnectionString;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        insertData1();
    }

我根据建议进行了一些更改,但错误已更改为

  

Error - Object reference not set to an instance of an object.   我试过但没有得到任何线索。

3 个答案:

答案 0 :(得分:3)

您使用了错误的sql参数名称

cmd.Parameters.Add(new SqlParameter("@SChn", Request.QueryString["SChn"]));
cmd.Parameters.Add(new SqlParameter("@PAN", Request.QueryString["PAN"]));
cmd.Parameters.Add(new SqlParameter("@STag", Request.QueryString["STag"]));
cmd.Parameters.Add(new SqlParameter("@MAC", Request.QueryString["MAC"]));

您需要指定与sql查询完全相同的名称

修改

之前添加此项,如果您传递正常的空值或空值,则会收到错误,因此您需要传递DBNull.Value而不是

if(string.IsNullOrWhitespace(Request.QueryString["SChn"]))
{
    cmd.Parameters.Add(new SqlParameter("@SChn", DBNull.Value);
}
else
{
    cmd.Parameters.Add(new SqlParameter("@SChn", Request.QueryString["SChn"]));
}

<强> EDIT2

如果您的列为not null列,则将代码更改为:

    if (!String.IsNullOrWhitespace(Request.QueryString["SChn"]))
    {
        if (!String.IsNullOrWhitespace(Request.QueryString["PAN"]))
        {
            if (!String.IsNullOrWhitespace(Request.QueryString["Stag"]))
            {
                if (!String.IsNullOrWhitespace(Request.QueryString["MAC"]))
                {
                    insertData();
                }
            }
        }
    }

因为您只想在不是null而非空

的情况下才添加值

答案 1 :(得分:2)

更改此代码部分。您应该指定参数名称,而不是列名。

cmd.Parameters.Add(new SqlParameter("@SChn", Request.QueryString["SChn"]));
cmd.Parameters.Add(new SqlParameter("@PAN", Request.QueryString["PAN"]));
cmd.Parameters.Add(new SqlParameter("@STag", Request.QueryString["STag"]));
cmd.Parameters.Add(new SqlParameter("@MAC", Request.QueryString["MAC"]));

修改

某些值可以为空字符串。您也应该更改此代码

if (!String.IsNullOrEmpty(Request.QueryString["SChn"]))
        {
            if (!String.IsNullOrEmpty(Request.QueryString["PAN"]))
            {
                if (!String.IsNullOrEmpty(Request.QueryString["Stag"]))
                {
                    if (!String.IsNullOrEmpty(Request.QueryString["MAC"]))
                    {
                        insertData();
                    }
                }
            }
        }

有关此内容的更多信息

SqlCommand.Parameters Property

答案 2 :(得分:1)

问题:您应该提供SQL Command Parameters语句

中指定的INSERT INTO

您已将使用过的insert插入如下:

"INSERT INTO SensorConfig(Sensor_Channel, PAN_ID, SENSOR_TAG, MAC_Address) VALUES(@SChn, @PAN, @STag, @MAC)"

所以你应该提供如下:

cmd.Parameters.Add(new SqlParameter("@SChn", Request.QueryString["SChn"]));
cmd.Parameters.Add(new SqlParameter("@PAN", Request.QueryString["PAN"]));
cmd.Parameters.Add(new SqlParameter("@STag", Request.QueryString["STag"]));
cmd.Parameters.Add(new SqlParameter("@MAC", Request.QueryString["MAC"]));
cmd.ExecuteNonQuery();

解决方案2:我认为您的第三个查询字符串为Request.QueryString["Stag"]小而不是资本S检查一次

解决方案3:如果条件如下更改

if ((Request.QueryString["SChn"] != null) && (!(Request.QueryString["SChn"].Trim().Equals(""))))
{
   if ((Request.QueryString["PAN"] != null) && (!(Request.QueryString["PAN"].Trim().Equals(""))))
   {
      if ((Request.QueryString["STag"] != null) && (!(Request.QueryString["STag"].Trim().Equals(""))))
      {
         if ((Request.QueryString["MAC"] != null) && (!(Request.QueryString["MAC"].Trim().Equals(""))))
         {
            insertData();
         }
      }
   }
}
插入数据时

使用Trim

cmd.Parameters.Add(new SqlParameter("@SChn", Request.QueryString["SChn"].Trim()));
cmd.Parameters.Add(new SqlParameter("@PAN", Request.QueryString["PAN"].Trim()));
cmd.Parameters.Add(new SqlParameter("@STag", Request.QueryString["STag"].Trim()));
cmd.Parameters.Add(new SqlParameter("@MAC", Request.QueryString["MAC"].Trim()));