CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

如何将带有逗号引号之类的内容插入到sqlserver数据库中。

楼主lxg2000(失落的神殿)2005-11-01 13:52:48 在 .NET技术 / C# 提问

我的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

相关问题

  • sqlserver中 如何插入一条某字段带引号"的记录
  • 如何插入单引号,谢谢!
  • access中怎么插入引号?
  • 字符串内的引号—SQL Serevr 的插入(ADO方法)
  • 关于用SQL语句插入单引号问题?
  • 请问怎么把单引号插入到oracle数据库中?
  • 怎么向数据库中插入引号啊?
  • 如何插入或更新带单引号的数据
  • 存储过程语句里面插入"'"(单引号)的问题
  • 存储过程语句里面插入"'"(单引号)的问题

关键词

  • sql
  • 学历
  • 内容
  • mx
  • gongneng
  • 逗号
  • 插入
  • 参数
  • 方法
  • 描述

得分解答快速导航

  • 帖主:lxg2000
  • netpot
  • jinjazz
  • du9232
  • thinkingforever
  • flygoldfish

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo