3

我的 SQL Server 数据库中有一个表:

DOCUMENT(DOC_NUM,DOC_NAME,...)
{
 DOC_NUM: nvarchar(50);
...
}

DOC_NUM有一行DOC_NUM= DD121

在网络表单中我执行一个查询:

string docnum= "DD121";
string sql= "select * from DOCUMENT where DOC_NUM="+docnum;
Datatable doc= ....EXECUTEQUERYSQL(sql);
int count= doc.Rows.Count;

它会导致错误:

当前 Web 请求执行期间发生未处理的异常。

在代码行:

int count= doc.Rows.Count;

但是当我将其更改为:

string sql= "select * from DOCUMENT where DOC_NUM= 'DD121'";
    Datatable doc= ....EXECUTEQUERYSQL(sql);
    int count= doc.Rows.Count;

效果很好!

我真的不知道为什么?

4

2 回答 2

5

当您使用此字符串连接时,您的查询将DOC_NUM= DD121不是DOC_NUM= 'DD121'哪个是错误的。

并且这种字符串连接对SQL 注入攻击是开放的。

改用参数化查询

string sql= "select * from DOCUMENT where DOC_NUM = @docnum";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@docnum", docnum);
于 2013-09-10T08:32:02.060 回答
0

您会收到此异常,因为您在指定 DOC_NUM值时错过了单引号。它应该是"select * from DOCUMENT where DOC_NUM='"+docnum +"'";

这些错误可以通过使用 SQL 参数来避免,并且更加安全。

于 2013-09-10T08:31:58.270 回答