亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊(cè) ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

SQL Server中單引號(hào)的兩種處理技巧

添加時(shí)間:2013-3-7 17:38:32  添加: 思海網(wǎng)絡(luò) 
和數(shù)據(jù)庫打交道要頻繁地用到SQL語句,除非你是全部用控件綁定的方式,但采用控件綁定的方式存在著靈活性差、效率低、功能弱等等缺點(diǎn)。因此,大多數(shù)的程序員極少或較少用這種綁定的方式。而采用非綁定方式時(shí)許多程序員大都忽略
了對(duì)單引號(hào)的特殊處理,一旦SQL語句的查詢條件的變量有單引號(hào)出現(xiàn),數(shù)據(jù)庫引擎就會(huì)報(bào)錯(cuò)指出SQL語法不對(duì),本人發(fā)現(xiàn)有兩種方法可以解決和處理這種單引號(hào)的問題(以VB為例子)。

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

Function ProcessStr(str As String)
Dim pos As Integer
Dim stedest As String
  pos = InStr(str, "'")
  
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)字符串中有單引號(hào)出現(xiàn),就在前面補(bǔ)上一個(gè)單引號(hào)。

---- 方法二:利用數(shù)據(jù)對(duì)象中的參數(shù)?梢岳肁DODB.COMMAND對(duì)象,把含有單引號(hào)的字符串傳遞給COMMAND,然后執(zhí)行查
詢等操作即可。

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

---- 下面就舉例子加以說明。

---- 新建一個(gè)項(xiàng)目,項(xiàng)目中有一個(gè)窗體(Form1),兩個(gè)命令按鈕,一個(gè)MSFlexGrid,名稱分別為:Command1,
Command2,MSFlexGrid1,一個(gè)COMBOX(COMBO1),它的內(nèi)容預(yù)先設(shè)定為"Paolo''f"、"Paolo'f"。Command1演示方法一,
Command2演示方法二,MSFlexGrid1存儲(chǔ)方法二查詢(SELECT)結(jié)果。對(duì)于其他的SQL操作(INSERT、DELTER、UPDATAE)方法
極為類似,筆者就不再贅述。例子中用到SQL SERVER中的PUBS數(shù)據(jù)庫中的EMPLOYEE表,同時(shí)可以用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  '生成一個(gè)連接
  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 Sub
Private Sub Command1_Click()    '演示字符處理
Dim i As Integer
Dim j As Integer
  Set parm = New ADODB.Parameter
Set mycommand = New ADODB.Command

Dim str As String
str = Combo1.Text
str = ProcessStr (str)
mycommand.ActiveConnection = cnn1   '
指定該command 的當(dāng)前活動(dòng)連接
mycommand.CommandText = " select * from
employee where fname = '" & str & "'"
mycommand.CommandType = adCmdText   '表明command 類型
Set rstByQuery = New ADODB.Recordset
Set rstByQuery = mycommand.Execute()
i = 0
Do While Not rstByQuery.EOF
i = i + 1    '  i 中保存記錄個(gè)數(shù)
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows = i + 1  '動(dòng)態(tài)設(shè)置MSFlexGrid的行和列
MSFlexGrid1.Cols = rstByQuery.Fields.count + 1
MSFlexGrid1.Row = 0
For i = 0 To rstByQuery.Fields.count - 1
MSFlexGrid1.Col = i + 1
MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name
Next   '設(shè)置第一行的標(biāo)題,用域名填充

i = 0
'Set rstByQuery = mycommand.Execute()
rstByQuery.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)  '添充所有的列
  Next
rstByQuery.MoveNext

   Loop  '這個(gè)循環(huán)用來填充MSFlexGrid的內(nèi)容
End Sub
Private Sub Command2_Click()'參數(shù)方法
Dim i As Integer
   Dim j As Integer

Set parm = New ADODB.Parameter
Set mycommand = New ADODB.Command

' parm_jobid.Name = "name1"  this line can be ommited
parm.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 的當(dāng)前活動(dòng)連接
mycommand.CommandText = " select *
from employee where fname =? "        
mycommand.CommandType = adCmdText   '表明command 類型
Set rstByQuery = New ADODB.Recordset
Set rstByQuery = mycommand.Execute()
i = 0
Do While Not rstByQuery.EOF
i = i + 1    '  i 中保存記錄個(gè)數(shù)
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows = i + 1  '動(dòng)態(tài)設(shè)置MSFlexGrid的行和列
MSFlexGrid1.Cols = rstByQuery.Fields.count + 1
MSFlexGrid1.Row = 0
For i = 0 To rstByQuery.Fields.count - 1
MSFlexGrid1.Col = i + 1
MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name
Next   '設(shè)置第一行的標(biāo)題,用域名填充

i = 0
rstByQuery.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)  '添充所有的列
  Next
rstByQuery.MoveNext

   Loop  '這個(gè)循環(huán)用來填充MSFlexGrid的內(nèi)容
End Sub
---- 查詢部分可以用存儲(chǔ)過程以提高處理效率,減低網(wǎng)絡(luò)流量。

---- 本程序在NT WORKSTATION 4.0 SP4、SQL SERVER 7.0 上調(diào)試通過。
關(guān)鍵字:網(wǎng)絡(luò)流量、數(shù)據(jù)庫
分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號(hào):粵B2-20030321-1
網(wǎng)站公安備案編號(hào):44060602000007 交互式欄目專項(xiàng)備案編號(hào):200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開網(wǎng)站