java、C#中Sql语句传参的写法及意义

本文探讨了C#与Java中SQL参数化查询的方法及其优势,包括提升SQL语句性能、防止SQL注入等问题,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Sqlserver这东西没少跟他打交道,刚学开发语言时就已经跟他接触了,不要说很精通,但就语法还算是熟悉,但现在开始写C#,发现很C#多了一种SqlServer的参数传入方式,以往我们常常对要传参的Sql语句都是直接通过拼凑Sql语句的方式来实现,但现在C#为什么要专门做一个Sql参数的类来实现呢,经过查找才知道,这样做是有道理的,一是可以优化SQL语句(在oracle的教程的类似的传参SQL语句是只会预编译一次,无论传入多少次参数,都只编译一次,这样是可以优化同一SQL语句频繁使用的情况,SQLSERVER中不知道有没这方面的优化,Sqlserver的存储过程只要有传入参,是不会一次编译的是多次编译......),二是可以检查传入参的数据类型,过滤非法字符...这样可以有效阻止SQL的注入式破解.具体写法如下.

 

C#:

java:

 

后补于2013/08/15:

最近由于服务器不支持SqlConnection,又没法打补丁,所以使用OdbcConnection来进行连接数据库的操作,但在应用传参语句时出现如下问题:

语句:

string jsry = dr1["Ryzd_Ry_F"].ToString().Trim();       //接收人员
sqlse1 = "Insert Into Alarm_Bjxxb(Type_F,Ryzd_Js_F,SendTime_F,Content_F,DisPlay_F,Bz_F,LinkKey_F)"
       +" values('客户证照近效期',@p1,getDate(),@p2,'1','','"+serName+"')";
sqlCmd = new OdbcCommand(sqlse1, conn);
OdbcParameter par1 = new OdbcParameter("@p1", jsry);
sqlCmd.Parameters.Add(par1);
OdbcParameter par2 = new OdbcParameter("@p2", xmlString);
sqlCmd.Parameters.Add(par2);
sqlCmd.ExecuteNonQuery();

执行时错误提示如下:

[SQL Server] 必须声名变量 @p1
苦找了N久最后在网上发现,要把@p1,@p2改为?后才可正常执行,晕啊!

修改后Sqlse1如下:

sqlse1 = "Insert Into Alarm_Bjxxb(Type_F,Ryzd_Js_F,SendTime_F,Content_F,DisPlay_F,Bz_F,LinkKey_F)" +" values('客户证照近效期',?,getDate(),?,'1','','"+serName+"')";

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值