电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

SQL Server中單引號的兩種處理技巧

瀏覽:148日期:2023-10-28 17:27:07
---- 和數(shù)據(jù)庫打交道要頻繁地用到SQL語句,除非你是全部用控件綁定的方式,但采用控件綁定的方式存在著靈活性差、效率低、功能弱等等缺點。因此,大多數(shù)的程序員極少或較少用這種綁定的方式。而采用非綁定方式時許多程序員大都忽略了對單引號的特殊處理,一旦SQL語句的查詢條件的變量有單引號出現(xiàn),數(shù)據(jù)庫引擎就會報錯指出SQL語法不對,本人發(fā)現(xiàn)有兩種方法可以解決和處理這種單引號的問題(以VB為例子)。 ---- 方法一:利用轉(zhuǎn)義字符處理SQL語句。下面的函數(shù)可以在執(zhí)行SQL語句前調(diào)用,執(zhí)行處理后的結(jié)果即可產(chǎn)生正確的結(jié)果。 Function ProcessStr(str As String)Dim pos As IntegerDim stedest As String;;pos = InStr(str, "'");;While pos > 0str = Mid(str, 1, pos) & "'" & Mid(str, pos + 1)pos = InStr(pos + 2, str, "'")WendProcessStr = strEnd Function---- 其中str參數(shù)是你的SQL字符串。函數(shù)一旦發(fā)現(xiàn)字符串中有單引號出現(xiàn),就在前面補上一個單引號。 ---- 方法二:利用數(shù)據(jù)對象中的參數(shù)??梢岳肁DODB.COMMAND對象,把含有單引號的字符串傳遞給COMMAND,然后執(zhí)行查詢等操作即可。 ---- 以上兩種方法比較,方法一增加了系統(tǒng)處理時間,方法二簡潔、高效,如果采用存儲過程,然后再傳遞參數(shù)給存儲過程,存儲過程是預(yù)編譯的,這樣系統(tǒng)的效率更高。 ---- 下面就舉例子加以說明。 ---- 新建一個項目,項目中有一個窗體(Form1),兩個命令按鈕,一個MSFlexGrid,名稱分別為:Command1,Command2,MSFlexGrid1,一個COMBOX(COMBO1),它的內(nèi)容預(yù)先設(shè)定為"Paolo''f"、"Paolo'f"。Command1演示方法一,Command2演示方法二,MSFlexGrid1存儲方法二查詢(SELECT)結(jié)果。對于其他的SQL操作(INSERT、DELTER、UPDATAE)方法極為類似,筆者就不再贅述。例子中用到SQL SERVER中的PUBS數(shù)據(jù)庫中的EMPLOYEE表,同時可以用SQL語法把其中兩條記錄中的FNAME改為"Paolo''f"、"Paolo'f"。 SQL語法如下: update employee set fname=" Paolo''''f";;where emp_id='PMA42628M'update employee set fname=" Paolo''f";;where emp_id='PMA42628M'---- 程序如下: ---- 首先把前面的函數(shù)加入。 ---- 在窗體的通用中聲明如下變量: Dim cnn1 As ADODB.Connection;;'連接Dim mycommand As ADODB.Command '命令Dim rstByQuery As ADODB.Recordset '結(jié)果集Dim strCnn As String;;'連接字符串Private Sub Form_Load();;Set cnn1 = New ADODB.Connection;;'生成一個連接;;strCnn = "driver={SQL Server};" & _;;;;;;"server=ZYX_pc;uid=sa;pwd=PCDC;database=pubs" ' 沒有系統(tǒng)數(shù)據(jù)源使用連接字符串;;;'strCnn = "DSN=mydsn;UID=sa;PWD=;"'DATABASE=pubs;Driver={SQL Server};SERVER=gzl_pc" '如果系統(tǒng)數(shù)據(jù)源MYDSN指向PUBS數(shù)據(jù)庫,也可以這樣用cnn1.Open strCnn, , , 0 '打開連接End SubPrivate Sub Command1_Click();;;;'演示字符處理Dim i As IntegerDim j As Integer;;Set parm = New ADODB.ParameterSet mycommand = New ADODB.CommandDim str As Stringstr = Combo1.Textstr = ProcessStr (str)mycommand.ActiveConnection = cnn1;;;'指定該command 的當前活動連接mycommand.CommandText = " select * from employee where fname = '" & str & "'" mycommand.CommandType = adCmdText;;;'表明command 類型Set rstByQuery = New ADODB.RecordsetSet rstByQuery = mycommand.Execute()i = 0Do While Not rstByQuery.EOFi = i + 1;;;;';;i 中保存記錄個數(shù)rstByQuery.MoveNextLoopMSFlexGrid1.Rows = i + 1;;'動態(tài)設(shè)置MSFlexGrid的行和列MSFlexGrid1.Cols = rstByQuery.Fields.count + 1MSFlexGrid1.Row = 0For i = 0 To rstByQuery.Fields.count - 1MSFlexGrid1.Col = i + 1MSFlexGrid1.Text = rstByQuery.Fields.Item(i).NameNext;;;'設(shè)置第一行的標題,用域名填充i = 0'Set rstByQuery = mycommand.Execute()rstByQuery.RequeryDo While Not rstByQuery.EOF;;i = i + 1;;MSFlexGrid1.Row = i;;'確定行;;For j = 0 To rstByQuery.Fields.count - 1;;MSFlexGrid1.Col = j + 1;;MSFlexGrid1.Text = rstByQuery(j);;'添充所有的列;;NextrstByQuery.MoveNext;;;Loop;;'這個循環(huán)用來填充MSFlexGrid的內(nèi)容End SubPrivate Sub Command2_Click()'參數(shù)方法Dim i As Integer;;;Dim j As IntegerSet parm = New ADODB.ParameterSet mycommand = New ADODB.Command' parm_jobid.Name = "name1";;this line can be ommitedparm.Type = adChar '參數(shù)類型parm.Size = 10;;'參數(shù)長度parm.Direction = adParamInput '參數(shù)方向,輸入或輸出parm.Value = Combo1.Text;;;;;;'參數(shù)的值mycommand.Parameters.Append parm;;'加入?yún)?shù);;mycommand.ActiveConnection = cnn1;;;'指定該command 的當前活動連接mycommand.CommandText = " select * from employee where fname =? "mycommand.CommandType = adCmdText;;;'表明command 類型Set rstByQuery = New ADODB.RecordsetSet rstByQuery = mycommand.Execute()i = 0Do While Not rstByQuery.EOFi = i + 1;;;;';;i 中保存記錄個數(shù)rstByQuery.MoveNextLoopMSFlexGrid1.Rows = i + 1;;'動態(tài)設(shè)置MSFlexGrid的行和列MSFlexGrid1.Cols = rstByQuery.Fields.count + 1MSFlexGrid1.Row = 0For i = 0 To rstByQuery.Fields.count - 1MSFlexGrid1.Col = i + 1MSFlexGrid1.Text = rstByQuery.Fields.Item(i).NameNext;;;'設(shè)置第一行的標題,用域名填充i = 0rstByQuery.Requery Do While Not rstByQuery.EOF;;i = i + 1;;MSFlexGrid1.Row = i;;'確定行;;For j = 0 To rstByQuery.Fields.count - 1;;MSFlexGrid1.Col = j + 1;;MSFlexGrid1.Text = rstByQuery(j);;'添充所有的列;;NextrstByQuery.MoveNext;;;Loop;;'這個循環(huán)用來填充MSFlexGrid的內(nèi)容End Sub---- 查詢部分可以用存儲過程以提高處理效率,減低網(wǎng)絡(luò)流量。 ---- 本程序在NT WORKSTATION 4.0 SP4、SQL SERVER 7.0 上調(diào)試通過。
主站蜘蛛池模板: Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 巨野月嫂-家政公司-巨野县红墙安康母婴护理中心 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 芝麻黑-芝麻黑石材厂家-永峰石业 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 深圳市源和塑胶电子有限公司-首页 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 |