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)
它工作正常!
我真的不知道为什么?
当您使用此字符串连接,您的查询将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)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |