@在SQL语句中是怎么使用的

iamwls 2005-10-09 09:07:26
String sql = "select * from Shippers where 1=1 ";
if( ShipperId !="")
sql += " and ShipperID="+ ShipperId;
if(CompanyName!="")
sql += " and CompanyName='"+ Phone+"'";
if(Phone!="")
sql += " and Phone='"+ Phone+"'";
Console.WriteLine(sql);

这段代码可真麻烦,有什么办法用@优化它们吗?谁会优化一下
...全文
627 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
HarryLin 2005-10-09
  • 打赏
  • 举报
回复
@是SQL里面的全局变量的意思。但是如果你只是为了避免被注入,把'过滤掉就行了,何必那么麻烦
iamwls 2005-10-09
  • 打赏
  • 举报
回复
我是楼主

楼上的写的很仔细非常感谢,可我看不懂 :(
这样做有什么好处吗?谁帮我简单解释一下

用@可以避免攻击性Sql语句吗?避免SQL注射?
通常我都是在校验的时候检查的,@如果有这个功能就太好了,@到底是干嘛用的,有专门的文档解释这个吗?

着急赶项目,时间真紧呀
vivianfdlpw 2005-10-09
  • 打赏
  • 举报
回复
String sql = "select * from Shippers "+
"where ShipperID=isnull(@ShipperID,ShipperID) "+
" and CompanyName=isnull(@CompanyName,CompanyName)"+
" and Phone=isnull(@Phone,Phone)" ;
System.Data .SqlClient .SqlParameter [] parm=new System.Data.SqlClient.SqlParameter []
{
new System .Data .SqlClient .SqlParameter ("@ShipperID",SqlDbType.Int),
new System .Data .SqlClient .SqlParameter ("@CompanyName",SqlDbType.VarChar),
new System .Data .SqlClient .SqlParameter ("@Phone",SqlDbType.VarChar)
};
if( ShipperId !="")
{
parm[0].Value=ShipperId;
}
else
{
parm[0].Value=System.DBNull.Value;
}

if( CompanyName !="")
{
parm[1].Value=CompanyName;
}
else
{
parm[1].Value=System.DBNull.Value;
}
if( Phone !="")
{
parm[2].Value=Phone;
}
else
{
parm[2].Value=System.DBNull.Value;
}
syeerzy 2005-10-09
  • 打赏
  • 举报
回复
@无法起“优化”的作用,但是如果你上面的ShipperId ,Phone,CompanyName是来源于“不可信任的数据”,比如用户输入(你无法保证用户不想攻击你的服务器),get数据等。那么你的这个语句就有必要改写成参数化(@###),否则这个地方将是程序的一个致命的数据库入侵点。

比如ShipperId =“1 \*这里换成攻击性Sql语句*\ -- ”(后面的--把以后的部分都注释掉了,防止语法错误)。
LGame 2005-10-09
  • 打赏
  • 举报
回复
@我只是用在了,往库里写一些特别的时候用的,像图片~~
cw888 2005-10-09
  • 打赏
  • 举报
回复
@主要是存储过程的变量中使用,C#中传参使用
自由程序员 2005-10-09
  • 打赏
  • 举报
回复
经常重复输入同样的字串,用较短的怪字串代替,写完后,用正确的字串替换掉就行了,能省不少时间,也可以减少打错的机会
jijl2001 2005-10-09
  • 打赏
  • 举报
回复
没有必要吧,要用也就是把你的变量前加一个@,然后再指定它的值就行了
loveyzy 2005-10-09
  • 打赏
  • 举报
回复
@只是实现参数化查询,如果不用存储过程好像也没必要
singlepine 2005-10-09
  • 打赏
  • 举报
回复
以上代码很好啊,用@优化似乎没必要了
mapserver 2005-10-09
  • 打赏
  • 举报
回复
不明白楼主的意思。
adow 2005-10-09
  • 打赏
  • 举报
回复
string sql=
@"insert into tb_userprivilge (resourceidentity,userid,siteid,columnid,sign)
values(@resourceidentity,@userid,@siteid,@columnid,1)";
SqlParameter[] paramsToStore = new SqlParameter[4];
paramsToStore[0] = new SqlParameter("@resourceidentity", SqlDbType.VarChar);
paramsToStore[0].Value =privilge.resourceidentity;
paramsToStore[1]=new SqlParameter ("@userid",SqlDbType.Int);
paramsToStore[1].Value=privilge.userid;
paramsToStore[2]=new SqlParameter ("@siteid",SqlDbType.Int);
paramsToStore[2].Value=privilge.siteid;
paramsToStore[3]=new SqlParameter ("@columnid",SqlDbType.Int);
paramsToStore[3].Value=privilge.columnid;

SqlHelperParameterCache.CacheParameterSet(CONN_STRING,
sql,paramsToStore);
我是这样写的
iamwls 2005-10-09
  • 打赏
  • 举报
回复
OK,谢谢楼上,一会儿揭贴
gflpower 2005-10-09
  • 打赏
  • 举报
回复


在变量名前加@符号, 就是取消转义


110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧