2011-09-03 62 views
0

如果你请帮我,我有一个问题在SQL代码asp.net C#中。在asp.net中的SQL错误

我的错误是:

System.Data.SqlClient.SqlException了未处理由用户代码
消息=附近有语法错误 ')'。

和我的查询代码去如下:

string query = @"insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) 
          values(" + 0 + "," + ListBox4.SelectedValue +"," + ListBox1.SelectedValue + "," + null + ")"; 

回答

7

您不能像这样插入null。使用参数化查询。

string query = "insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) 
       values (@overall_rating,@paper_id,@conference_role_id,@details)"; 

cmd=new SqlCommand(query,cn); 
cmd.Parameters.AddWithValue("@overall_rating",0); 
cmd.Parameters.AddWithVaule("@paper_id",ListBox2.SelectedValue); 
cmd.Parameters.AddWithValue("@conference_role_id",Listbox1.SelectedValue); 
cmd.Parameters.AddWithValue("@details",DBNull.Value); 
+0

+1参数化查询,因为这是从SQL注入攻击更安全,对吧? –

1

我觉得null很可能使事情生气:

string query = @"insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) 
        values(0," + ListBox4.SelectedValue +"," + ListBox1.SelectedValue + ",null)"; 

你会发现我做的字符串的一部分0并将null作为字符串的一部分(而不是连接整数0NULL值与字符串)

+0

@emilios,我相信jadarnel27有它,因为关键字null可以被INSERT语句理解,而不是您正在编写的C#代码。也许在调试器中查看查询的值或将其转储到屏幕以查看您和解决方案之间的差异。 – McArthey

1

你对这个例子做了什么是你正在创建一个SQL字符串,你打算发送到数据库,将在那里执行。当你使你的字符串的字符串的结果是类似的...

"insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) values(0, someValueFromListbox4,someOtherValueFromListbox1,)" 

你会注意到最后一个参数丢失。为了解决这个问题试试这个...

string query = @"insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) 
        values(" + 0 + "," + ListBox4.SelectedValue +"," + ListBox1.SelectedValue + ",NULL)"; 

下面是使用的String.Format另一个例子,我会reccommend

string query = String.format("Insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) Values(0,{0},{1},NULL)", ListBox4.SelectedValue, ListBox1.SelectedValue); 
+0

对于'String.format'建议+1! – jadarnel27

5

是的,正如其他人已经说过,你不能使用空的方式你正在做的,但存在着较为严重的问题比:

  1. 你的SQL语句很容易出现SQL注入攻击,因为你不是参数化的查询
  2. 如果您没有将值插入列中,只需不列出列!这将工作:

    string query = @"insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID) values(" + 0 + "," + ListBox4.SelectedValue +"," + ListBox1.SelectedValue +")";

+0

嘿,非常好的一点。 +1 =) – jadarnel27

1

尝试把讲话引号内空,因此最终的样子 “空)”;