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:)