VB數據庫編程的幾點心得

 

一、ADODB.Connection的連接字符串(ConnectionString)的生成之道
  ADO是當前訪問數據庫的主流,但其ConnectionString往往有一大串,並且在訪問不同的數據庫(如Access和SQL Server),或訪問方式(通過ODBC和OLE DB)不一樣時,其具體參數的設置差異很大,這給連接字符串的編寫增加了一定的難度。這裏給大家介紹兩種生成ConnectionString的方法,以便在沒有現成的資料可供參考時,寫出需要的連接字符串。
  方法一,使用ADODC控件的連接字符串嚮導生成連接字符串。
  用VB新建一標準EXE工程,先引用ADODC部件(選菜單[工程]/[部件...],在彈出的部件窗口中選Microsoft ADO Data Control),再將其加到Form1上,默認名爲Adodc1;選中Adodc1,在其上單擊右鍵,單擊“ADODC屬性”,選“使用連接字符串”,單擊“生成”按鈕,接下來根據該向導一步一步輸入各相關的連接信息,“確定”後,在“使用連接字符串”下面的文本框中就是我們需要的內容。
  方法二,調用Ado連接窗口,獲得連接字符串。
  用VB新建一標準EXE工程,引用Microsoft OLE DB Service Component 1.0 Type Libary和Microsoft ActiveX Data Objects 2.x Library(具體操作與ADODC的引用類似,只是通過菜單[工程]/[引用...]選),加一個TextBox到Form1,雙擊Form1,進入Code編輯區,清除VB自動生成的所有代碼,再輸入下述代碼:

  Option Explicit

  Private Sub Form_Load()
      Dim dlTemp As MSDASC.DataLinks
      Dim cnTemp As ADODB.connection
   
      Set dlTemp = New MSDASC.DataLinks
      Set cnTemp = New ADODB.connection
   
      dlTemp.PromptEdit cnTemp
      Text1.Text = cnTemp.ConnectionString

      Set dlTemp = Nothing
      Set cnTemp = Nothing
  End Sub

  運行時會彈出一個與ADODC相似的生成連接字符串的嚮導,輸入各相關數據,“確定”後在Form1的Text1中就得到我們需要的連接字符串。

二、漢字亂碼問題
  筆者曾經在使用ADO向SQL Server 6.5中追加或修改數據後,發現查詢出來的漢字都是亂碼,最初以爲是客戶端的環境有問題,後來打開服務器端的數據庫,發現其中的漢字也都是亂碼,費了九牛二虎之力才找到原因:在追加和修改的過程中,ADO將字符進行了自動翻譯(AutoTranslate),翻譯後就成了亂碼(Microsoft給我們開了一個“小小”的玩笑),解決的辦法就是不讓它亂翻譯,具體操作如下:
  如果ADO通過OLE DB直接連接到數據庫,則在Connection的ConnectionString中加入字符串:AutoTranslate=False;
  如果ADO通過ODBC連接到數據庫,則在配置ODBC時,將“執行字符數據轉換”一項的勾去掉。

三、在SQL中處理含單引號的字符串
  VB在寫SQL時,對字符串數據都用單引號引起來,如:
    Select * from MyTable Where ID='FirstID'
若其中的FirstID爲First'ID,即中間多出一個單引號,則上述寫法將導致錯誤,解決的辦法是將字符串中的每一個單引號用兩雙引號替換,下面的函數StrToSQL完成該功能,並用單引號將處理後的字符串引起來:
  Private Function StrToSQL(ByVal strValue As String) As String
        StrToSQL = "'" + Replace(strValue, "'", "''") + "'"
    End Function
  在寫SQL時如有字符串數據,不管其中有沒有單引號,都可以這樣使用:
        strValue="First'Id"
    strSQL="Select * from MyTable Where ID="+StrToSQL(strValue)

四、只返回查詢結果的前N個記錄
  這是個老生常談的問題,稍有這方面經驗的人都會想到在SQL中用"Select Top"語句來完成此功能,如訪問Access數據庫時爲:
  Select top 50 * From MyTable
    SQL Server 7.0和SQL Server 2000中都可以這樣,但在SQL Server 6.5中不行,它不支持"Select Top",筆者採用了一個折衷的辦法,使用SQL Server 6.5的"Set Rowcount"來限制記錄數,例如:
    MyConnection.Execute "Set Rowcount 50"
    ......'執行查詢
    MyConnection.Execute "Set rowcount 0"    
    最後一行表示取消記錄數據限制,這句千萬不能少,因爲記錄數的限制在MyConnection的生存期都有效,所以其它的查詢也會受此限制,最多隻返回50條記錄,筆者曾深受其害。

本文中涉及的內容的測試平臺爲Visual Baisc 6.0 Enterprise+Service Pack 4。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章