如何将带有逗号引号之类的内容插入到sqlserver数据库中。
我的sql问是用string组成的
其中插入的内容存在变量中。
如果变量有逗号引号之类的内容就会报错,破环了原有的sql文结构。
如何能将这些字符转化成sqlserver允许插入的sql语句?
问题点数:100、回复次数:7Top
1 楼netpot(netpot)回复于 2005-11-01 13:56:12 得分 20
把sql string改用parameter的方法吧,一劳永逸,而且还可以防止注入式攻击。Top
2 楼jinjazz(近身剪)回复于 2005-11-01 13:56:46 得分 10
str是你的sql插入内容
str=str.Replace("'","''");Top
3 楼du9232(木土四正)回复于 2005-11-01 13:58:07 得分 10
一逗号不妨碍,二单引号替换成两个单引号Top
4 楼thinkingforever(努力学习)回复于 2005-11-01 14:02:29 得分 20
用sqlparameter
SqlParameter sqlparaFdShow=new SqlParameter("@FdShow",SqlDbType.VarChar,4000);
sqlparaFdShow.Value="'adfsfd'";Top
5 楼lxg2000(失落的神殿)回复于 2005-11-01 14:04:47 得分 0
to:netpot(netpot)
能给我写个简单的例子吗没用过parameter的方法。
谢了Top
6 楼flygoldfish(长江支流)回复于 2005-11-01 14:24:42 得分 40
两个方法:
第一个就是自己写一个Replace方法,把SQL的特殊字代替掉,SQL中'是定界符,所以一定要
转义,用两个''就可以了
public string ReplaceSQL(string sql)
{
string strReturn = sql;
strReturn.Replace("'","''");
//还有其它的,特别是Web编程下
}
第二个方法就是写参数
MS推荐这种方法,这样不至于被攻击
参数的方法一种是用于存储过程,一种是直接用于写在的SQL中
如
Insert into myTable (姓名,学历,描述) Values ('张三','李四','这是描述,有一个分别''啊')
如果用参数
Insert into myTable (姓名,学历,描述) Values (@xm,@xl,@mx)
其中xm,xl,mx分别代表描述姓名,学历,描述的参数对象
注意前面加不加@或其它的,要看特定的数据库
如Oracel的前面加:
Insert into myTable (姓名,学历,描述) Values (:xm,:xl,:mx)
举个完整的例子
this.oracleInsertCommand.CommandText = @"INSERT INTO GONG_NENG(ID, GONGNENG_BIAOSHI, GONGNENG_MINGCHENG, GONGNENG_JIANJIE, SUOSHU_CHUANGTI, YOUWU_JIEMIAN, GONGNENG_LEIBIE, GONGNENG_TI, KEFOU_ZHANXIAN, SHANGJI_GONGNENG_ID, BANBEN_HAO) VALUES (:ID, :GONGNENG_BIAOSHI, :GONGNENG_MINGCHENG, :GONGNENG_JIANJIE, :SUOSHU_CHUANGTI, :YOUWU_JIEMIAN, :GONGNENG_LEIBIE, :GONGNENG_TI, :KEFOU_ZHANXIAN, :SHANGJI_GONGNENG_ID, :BANBEN_HAO)";
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":ID", System.Data.OracleClient.OracleType.Number, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(10)), ((System.Byte)(0)), "ID", System.Data.DataRowVersion.Current, null));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":GONGNENG_BIAOSHI", System.Data.OracleClient.OracleType.VarChar, 255, "GONGNENG_BIAOSHI"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":GONGNENG_MINGCHENG", System.Data.OracleClient.OracleType.VarChar, 30, "GONGNENG_MINGCHENG"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":GONGNENG_JIANJIE", System.Data.OracleClient.OracleType.VarChar, 255, "GONGNENG_JIANJIE"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":SUOSHU_CHUANGTI", System.Data.OracleClient.OracleType.VarChar, 30, "SUOSHU_CHUANGTI"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":YOUWU_JIEMIAN", System.Data.OracleClient.OracleType.VarChar, 1, "YOUWU_JIEMIAN"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":GONGNENG_LEIBIE", System.Data.OracleClient.OracleType.VarChar, 1, "GONGNENG_LEIBIE"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":GONGNENG_TI", System.Data.OracleClient.OracleType.VarChar, 1024, "GONGNENG_TI"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":KEFOU_ZHANXIAN", System.Data.OracleClient.OracleType.VarChar, 1, "KEFOU_ZHANXIAN"));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":SHANGJI_GONGNENG_ID", System.Data.OracleClient.OracleType.Number, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(10)), ((System.Byte)(0)), "SHANGJI_GONGNENG_ID", System.Data.DataRowVersion.Current, null));
this.oracleInsertCommand.Parameters.Add(new System.Data.OracleClient.OracleParameter(":BANBEN_HAO", System.Data.OracleClient.OracleType.VarChar, 30, "BANBEN_HAO"));
这样虽然参数写的多了,但是比较安全,你也可以写一个程序自动生成或建立参数
还有,楼主可以打开IDE工具栏上的数据服务器,连接数据库号把一个表直接拖到窗口就可以学习参数的用法了
最好还是看看MSDN
Top
7 楼lxg2000(失落的神殿)回复于 2005-11-01 14:49:29 得分 0
楼上的谢了
我试试先
Top




