日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer單引號的2種處理方案

以下的文章主要描述的是SQL Server單引號的2種處理方案,我們大家在實際操作中和數(shù)據(jù)庫打交道時,SQL語句的使用頻率是非常高的,當然你也可以是全部用控件綁定的方式,但采用控件綁定的方式存在著靈活性差、效率低、功能弱等等缺點。

創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都網(wǎng)站設計、成都網(wǎng)站建設、外貿(mào)網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元順平做網(wǎng)站,已為上家服務,為順平各地企業(yè)和個人服務,聯(lián)系電話:18980820575

因此,大多數(shù)的程序員極少或較少用這種綁定的方式。而采用非綁定方式時許多程序員大都忽略了對SQL Server單引號的特殊處理,一旦SQL語句的查詢條件的變量有單引號出現(xiàn),數(shù)據(jù)庫引擎就會報錯指出SQL語法不對,本人發(fā)現(xiàn)有兩種方法可以解決和處理這種SQL Server單引號的問題(以VB為例子)。

SQL Server單引號處理技巧方法一:

利用轉(zhuǎn)義字符處理SQL語句。下面的函數(shù)可以在執(zhí)行SQL語句前調(diào)用,執(zhí)行處理后的結(jié)果即可產(chǎn)生正確的結(jié)果。

 
 
 
  1. Function ProcessStr(str As String) Dim pos As Integer Dim stedest As String pos = InStr(str, "'")   
  2. While pos > 0 str = Mid(str, 1, pos) & "'" & Mid(str, pos + 1) pos = InStr(pos + 2, str, "'") Wend ProcessStr = str End Function  

其中str參數(shù)是你的SQL字符串。函數(shù)一旦發(fā)現(xiàn)字符串中有SQL Server單引號出現(xiàn),就在前面補上一個單引號。

SQL Server單引號處理技巧方法二:

利用數(shù)據(jù)對象中的參數(shù)。可以利用ADODB.COMMAND對象,把含有單引號的字符串傳遞給COMMAND,然后執(zhí)行查詢等操作即可。

以上兩種方法比較,方法一增加了系統(tǒng)處理時間,方法二簡潔、高效,如果采用存儲過程,然后再傳遞參數(shù)給存儲過程,存儲過程是預編譯的,這樣系統(tǒng)的效率更高。

下面就舉例子加以說明。

新建一個項目,項目中有一個窗體(Form1),兩個命令按鈕,一個MSFlexGrid,名稱分別為:Command1,Command2,MSFlexGrid1,一個COMBOX(COMBO1),它的內(nèi)容預先設定為“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語法如下:

 
 
 
  1. update employee set fname=" Paolo''''f" where emp_id='PMA42628M' update employee set fname=" Paolo''f" where emp_id='PMA42628M' 

程序如下:

首先把前面的函數(shù)加入。在窗體的通用中聲明如下變量:

 
 
 
  1. Dim cnn1 As ADODB.Connection '連接 Dim mycommand As ADODB.Command '命令   
  2. Dim rstByQuery As ADODB.Recordset '結(jié)果集 Dim strCnn As String '連接字符串   
  3. Private Sub Form_Load() Set cnn1 = New ADODB.Connection '生成一個連接   
  4. strCnn = "driver={SQL Server};" & _ "server=ZYX_pc;uid=sa;pwd=PCDC;database=pubs" '   
  5. 沒有系統(tǒng)數(shù)據(jù)源使用連接字符串 'strCnn = "DSN=mydsn;UID=sa;PWD=;" 'DATABASE=pubs;  
  6. Driver={SQL Server};SERVER=gzl_pc" ' 如果系統(tǒng)數(shù)據(jù)源MYDSN指向PUBS數(shù)據(jù)庫,  
  7. 也可以這樣用 cnn1.Open strCnn, , , 0 '打開連接 End Sub Private Sub Command1_Click() '  
  8. 演示字符處理 Dim i As Integer Dim j As Integer Set parm = New ADODB.  
  9. Parameter Set mycommand = New ADODB.Command Dim str As String str = Combo1.  
  10. Text str = ProcessStr (str) mycommand.ActiveConnection = cnn1 '   
  11. 指定該command 的當前活動連接 mycommand.CommandText = " select * from employee  
  12. where fname = '" & str & "'" mycommand.CommandType = adCmdText '表明command 類型  
  13. Set rstByQuery = New ADODB.Recordset Set rstByQuery = mycommand.Execute() i = 0 Do   
  14. While Not rstByQuery.EOF ii = i + 1 ' i 中保存記錄個數(shù) rstByQuery.MoveNext Loop MSFlexGrid1.  
  15. Rows = i + 1 '動態(tài)設置MSFlexGrid的行和列 MSFlexGrid1.Cols = rstByQuery.Fields.count + 1  
  16. MSFlexGrid1.Row = 0 For i = 0 To rstByQuery.Fields.count - 1 MSFlexGrid1.Col = i + 1   
  17. MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name Next '設置第一行的標題,用域名填充 i = 0 '  
  18. Set rstByQuery = mycommand.Execute() rstByQuery.Requery Do While Not rstByQuery.EOF ii 
  19. = i + 1 MSFlexGrid1.Row = i '確定行 For j = 0 To rstByQuery.Fields.count - 1 MSFlexGrid1.  
  20. Col = j + 1 MSFlexGrid1.Text = rstByQuery(j) '添充所有的列 Next rstByQuery.MoveNext Loop '  
  21. 這個循環(huán)用來填充MSFlexGrid的內(nèi)容 End Sub Private Sub Command2_Click()'參數(shù)方法 Dim i As  
  22. Integer Dim j As Integer Set parm = New ADODB.Parameter Set mycommand = New ADODB.  
  23. Command ' parm_jobid.Name = "name1" this line can be ommited parm.Type = adChar '  
  24. 參數(shù)類型 parm.Size = 10 '參數(shù)長度 parm.Direction = adParamInput '參數(shù)方向,輸入或輸出  
  25. parm.Value = Combo1.Text '參數(shù)的值 mycommand.Parameters.Append parm '加入?yún)?shù) mycommand.ActiveConnection =
     cnn1 ' 指定該command 的當前活動連接 mycommand.CommandText = " select * from employee where fname =? " mycommand.  
  26. CommandType = adCmdText '表明command 類型 Set rstByQuery = New ADODB.Recordset   
  27. Set rstByQuery = mycommand.Execute() i = 0 Do While Not rstByQuery.EOF ii = i + 1 ' i   
  28. 中保存記錄個數(shù) rstByQuery.MoveNext Loop MSFlexGrid1.Rows = i + 1 '動態(tài)設置MSFlexGrid的  
  29. 行和列 MSFlexGrid1.Cols = rstByQuery.Fields.count + 1 MSFlexGrid1.Row = 0 For i = 0 To  
  30. rstByQuery.Fields.count - 1 MSFlexGrid1.Col = i + 1 MSFlexGrid1.Text = rstByQuery.  
  31. Fields.Item(i).Name Next '設置第一行的標題,用域名填充 i = 0 rstByQuery.Requery Do   
  32. While Not rstByQuery.EOF ii = i + 1 MSFlexGrid1.Row = i '確定行 For j = 0 To rstByQuery.  
  33. Fields.count - 1 MSFlexGrid1.Col = j + 1 MSFlexGrid1.Text = rstByQuery(j) '添充所有的列  
  34. Next rstByQuery.MoveNext Loop '這個循環(huán)用來填充MSFlexGrid的內(nèi)容 End Sub  

查詢部分可以用存儲過程以提高處理效率,減低網(wǎng)絡流量。本程序在NT WORKSTATION 4.0 SP4、SQL SERVER 7.0 上調(diào)試通過,上述的相關(guān)內(nèi)容就是對SQL Server單引號處理技巧的描述,希望會給你帶來一些幫助在此方面。


分享名稱:SQLServer單引號的2種處理方案
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/dpooice.html