none
開啟 ADO Connection的問題 RRS feed

  • 問題

  • 參考的文章是:
    1. INFO:將資料從 Visual Basic 傳送至 Excel 的方法
    2. 如何:使用 Visual Basic .NET 開啟 ADO Connection 和 Recordset 物件

    因為我的資料庫是使用SQLserver2005,
    所以,我把連接字串改成

            strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=" & _
                        Server.MapPath("App_Data/NORTHWND.MDF") & _
                       ";Integrated Security=True;" & _
                       "TrustServerCertificate=False;" & _
                       "User Instance=True;Context Connection=False"

    而文章2提供的是

                 strConn = "Provider=SQLOLEDB;Initial Catalog=Pubs;" & _
                      "Data Source=servername;" & _
                      "User ID=sa;Password=mypassword;"

    片段程式碼

            Dim strConn As String
            Dim conn As New ADODB.Connection
            Dim rs As ADODB.Recordset
            Dim cmd As New ADODB.Command()

             strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=" & _
                        Server.MapPath("App_Data/NORTHWND.MDF") & _
                       ";Integrated Security=True;" & _
                       "TrustServerCertificate=False;" & _
                       "User Instance=True;Context Connection=False"

            conn.ConnectionString = strConn
            conn.Open()
            'conn.Close()

    執行後會在conn.open這行出現"使用者程式碼未處理COMException"的警告
    內容是
         "多重步驟 OLE DB 操作發生錯誤。請檢查每一個可用的 OLE DB 狀態值。
           尚未完成任何操作。"

    請問為甚麼會產生這個問題呢?
    該怎麼解決好?

    2006年9月26日 下午 03:06

解答

  • 感謝您對微軟技術社群討論區的支持。根據您所參考的文件, 使用的範例是 Win Form 程式, 因此以下解答以 Win Form 為例。
     
    您的問題主要是 Connection String 設定造成的錯誤,由於是 Win Form 程式,因此無法使用您提供的的程式碼中的 Server.MapPath 方法。
     
             strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=" & _
                        Server.MapPath("App_Data/NORTHWND.MDF") & _
                       ";Integrated Security=True;" & _
                       "TrustServerCertificate=False;" & _
                       "User Instance=True;Context Connection=False"
     
    建議您在 Win Form 程式中改用以下的寫法以使用 Sql Server 檔案。
     
            cnStr = "Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;AttachDBFileName=" & _
            Application.StartupPath & "\Northwnd.mdf;Data Source=.\sqlexpress"
     
     
    如果您對上述的例子仍有疑問,歡迎於微軟技術社群討論區詢問您的問題。

    林順民 Sam Lin
    專案領域工程師
    Premier Field Engineer
    Premier Field Engineering - Taiwan
    Microsoft Services

    技術支援服務首頁: http://support.microsoft.com

    2006年12月12日 上午 04:13

所有回覆

  • 感謝您對微軟技術社群討論區的支持。根據您所參考的文件, 使用的範例是 Win Form 程式, 因此以下解答以 Win Form 為例。
     
    您的問題主要是 Connection String 設定造成的錯誤,由於是 Win Form 程式,因此無法使用您提供的的程式碼中的 Server.MapPath 方法。
     
             strConn = "Data Source=.\SQLEXPRESS;AttachDbFilename=" & _
                        Server.MapPath("App_Data/NORTHWND.MDF") & _
                       ";Integrated Security=True;" & _
                       "TrustServerCertificate=False;" & _
                       "User Instance=True;Context Connection=False"
     
    建議您在 Win Form 程式中改用以下的寫法以使用 Sql Server 檔案。
     
            cnStr = "Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=False;AttachDBFileName=" & _
            Application.StartupPath & "\Northwnd.mdf;Data Source=.\sqlexpress"
     
     
    如果您對上述的例子仍有疑問,歡迎於微軟技術社群討論區詢問您的問題。

    林順民 Sam Lin
    專案領域工程師
    Premier Field Engineer
    Premier Field Engineering - Taiwan
    Microsoft Services

    技術支援服務首頁: http://support.microsoft.com

    2006年12月12日 上午 04:13
  • 您好,對於您的問題,有點疑問,
    既然您用的是VB.NET,
    為何不直接使用ADO.NET的物件呢?
    而您是用ADO的寫法,可是連接字串又是用ADO.NET連接方式,
    我有點懷疑這樣可行嗎?
    建議您用DataSet或是DataReader接收SQL2005的資料,
    另外,
    您的資料庫是放在什麼地方呢?
    這個會影響連接字串的寫法,
    如果您只是要可以連線先,可以這樣寫
    Dim cn as New SqlConnection("Data Source=.;initial catalog=northwind;user id=uuu;password=ppp")
    其中,.表示你的Server名字,如果是express版本,建議改為 .\sqlexpress
    northwind是你的資料庫名稱
    uuu是你的使用者名稱
    ppp是這個使用者名稱相對的密碼

    2006年12月18日 上午 04:10