Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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# asp.net中的SQL错误_C#_Asp.net_Sql Server - Fatal编程技术网

C# asp.net中的SQL错误

C# asp.net中的SQL错误,c#,asp.net,sql-server,C#,Asp.net,Sql Server,如果您能帮助我,我在sql代码asp.net C#中遇到了一个问题 我的错误是: System.Data.SqlClient.SqlException未由用户代码处理 Message=靠近“')”的语法不正确 我的查询代码如下: string query = @"insert into ReviewPaper(Overall_Rating,Paper_ID,Conference_Role_ID,Deitails) values(" +

如果您能帮助我,我在sql代码asp.net C#中遇到了一个问题

我的错误是:

System.Data.SqlClient.SqlException未由用户代码处理
Message=靠近“')”的语法不正确

我的查询代码如下:

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

我认为
null
可能让事情变得愤怒:

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

您会注意到我将您的
0
作为字符串的一部分,并将
null
作为字符串的一部分(而不是将整数
0
null
值与字符串连接起来)

您不能这样插入
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);

在这个示例中,您要做的是创建一个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的示例,我推荐它

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

是的,正如其他人已经说过的那样,您不能以这种方式使用null,但还有比这更严重的问题:

  • 您的sql语句容易受到sql注入攻击,因为您没有参数化查询
  • 如果不在列中插入值,请不要列出该列!这将有助于:

    string query=@“插入到ReviewPaper(总体评分、论文ID、会议角色ID)
    值(“+0+”、“+ListBox4.SelectedValue+”、“+ListBox1.SelectedValue+”)


  • 试着把null放在语音标记中,使结尾看起来像“null”

    @emilios,我相信jadarnel27拥有它,因为关键字null被INSERT语句理解,而不是你正在编写的C#代码。也许可以在调试器中查看查询的值,或者将其转储到屏幕上,以查看您的查询与解决方案之间的差异。+1表示参数化查询,因为这对SQL注入攻击更安全,对吗?