从SQL Server请求webform中的nvarchar类型时出错

vyc*_*rks 3 c# sql sql-server asp.net webforms

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

DOCUMENT(DOC_NUM,DOC_NAME,...)
{
 DOC_NUM: nvarchar(50);
...
}
Run Code Online (Sandbox Code Playgroud)

并且表DOC_NUM有一行DOC_NUM= DD121;

在webform中我执行一个查询:

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

它会导致错误:

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

在代码行上:

int count= doc.Rows.Count;
Run Code Online (Sandbox Code Playgroud)

但当我把它改为:

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

它工作正常!

我真的不知道为什么?

Son*_*nül 5

当您使用此字符串连接,您的查询将DOC_NUM= DD121代替DOC_NUM= 'DD121'这是不对的.

这个字符串连接的kinf对SQL注入攻击是开放的.

改为使用参数化查询 ;

string sql= "select * from DOCUMENT where DOC_NUM = @docnum";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@docnum", docnum);
Run Code Online (Sandbox Code Playgroud)