Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 靠近'的语法不正确;nvarchar';。SQL Server错误_C#_Sql_Sql Server - Fatal编程技术网

C# 靠近'的语法不正确;nvarchar';。SQL Server错误

C# 靠近'的语法不正确;nvarchar';。SQL Server错误,c#,sql,sql-server,C#,Sql,Sql Server,我正在尝试使用查询字符串输入数据。我的代码是 protected void Page_Load(object sender, EventArgs e) { // insertData(); if (!String.IsNullOrWhiteSpace(Request.QueryString["SChn"])) { if (!String.IsNullOrWhiteSpace(Request.Qu

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

    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();
    }
我根据建议做了一些更改,但错误变为

错误-对象引用未设置为对象的实例。
我试过了,但没有得到任何线索


您使用了错误的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查询中完全相同的名称

编辑

在此之前添加此项,如果您传递的是正常的null或空值,您将得到错误,因此您需要传递
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

如果列
非空
列,请将代码更改为:

    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且不为空时添加值,所以请更改此代码部分。您应该指定参数名,而不是列名

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();
                    }
                }
            }
        }
更多信息


问题:您应该提供在SQL
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();
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();
         }
      }
   }
}
因此,您应提供以下信息:

"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();
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();
         }
      }
   }
}
解决方案2:我认为您的第三个查询字符串是
Request.QueryString[“Stag”]
small s不是大写字母s请检查一下

解决方案3:如果出现以下情况,则会发生变化:

"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();
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()));


@选民:请现在检查一下,如果有什么问题请告诉我missing@Saumil:我想当你使用QueryString时,你会得到null,你能调试一下,看看QueryString到底给出了什么吗?我在开始检查它是否为null,检查编辑的code@Saumil:用第2部分的解决方案检查我编辑的答案,检查第三个查询字符串参数
Stag
@Saumil:检查您的查询字符串是
Stag
还是
Stag
?请先检查一下编辑器-您的操作太复杂了-您可以使用
cmd.Parameters.Add(@SChn),SqlDbType.VarChar,50)。Value=Request.QueryString[“SChn”]我怀疑的主要问题是,请求字符串中的某些值可能为空-在这种情况下,没有向
参数
集合添加任何值!您需要检查查询字符串值是否为NULL,并提供一个合理的默认值(如果是这样的话)case@Saumil请检查我编辑的答案请求的值是多少。查询字符串[“SChn”]?它是空的吗?我正在开始检查它是否为空。检查编辑过的代码你正在检查它是否为空,但它可以是空字符串。@hgulyan:你在做逆运算,当所有内容都为空时调用Insert函数。@wudzik:我认为添加DBNull.Value不会解决问题,如果是这种情况,则为空(由QueryString返回)不应引发异常,如果im错误,请更正。@Sudhakar值也可以是
字符串。空的
不仅仅是空的。添加DBNull.Value只是一个建议的解决方案:)它将为数据库添加值(因此这是一种解决方案)@wudzik:我认为OP table列被定义为
notnull
,这就是为什么给出
DBNull.Value
可能无法解决问题的原因。你怎么说?如果我错了,请纠正我。@Sudhakar这是可能的,但没有提及。如果它们被标记为非空,那么值得一提。我将为该案例创建新样本。Thanks@wudzik:是,OP应该提到列约束,您的代码现在看起来非常完美+1:)