使用 ODBC 和 VB 项目连接到数据库时出现问题

Problems connecting to Database using ODBC and VB Project

编辑 3 我已经使用提供的链接来更改连接,这有效:)现在我对从我的数据库中提取的每条记录都有这条消息 Error Screen 编辑 2:没有 ODBC 的原因,只是它是第一个结果,代码如下 我正在 运行ning VS Studio 2017 Pro 与 SQL 服务器 ODBC 驱动程序 17 x64。在 运行 我 运行 解决这个问题的应用程序中,有没有我遗漏的步骤

OS:Windows 10 Pro x64(内部版本 2004)

System.InvalidOperationException
  HResult=0x80131509
  Message=The 'Odbc Driver 17 For SQL Serverserver=tcp:<servername>.database.windows.net, 1433' provider is not registered on the local machine.
  Source=System.Data
  StackTrace:
   at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()
   at MMYOB.CoA.CoA_Load(Object sender, EventArgs e) in C:\MMYOB\MMYOB\CoA.vb:line 11
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    'Create a connection object
    Dim ConnectionString As String = "provider=Odbc Driver 17 For SQL Server" + "server=tcp:<servername>.database.windows.net, 1433;Database=mmyob;Uid=sqldba;Pwd={your_password_here};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30"
    Dim SQL As String = "SELECT * FROM COA"
    Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConnectionString)

    ' open the connection 
    conn.Open()

    ' Create an OleDbDataAdapter object
    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
    adapter.SelectCommand = New OleDbCommand(SQL, conn)

    ' Create Data Set object
    Dim ds As DataSet = New DataSet("COA")
    ' Call DataAdapter's Fill method to fill data from the
    ' DataAdapter to the DataSet 
    adapter.Fill(ds)

    ' Bind dataset to a DataGrid control
    dataGrid1.DataSource = ds.DefaultViewManager

由于您没有指定这是什么类型的应用程序,所以我假设是 WinForms。代码的数据访问部分是相同的,只是对网格的绑定可能有所不同。

Azure Sql 服务器连接字符串的模式如下所示。

Server=tcp:myserver.database.windows.net,1433;Database=myDataBase;User ID=mylogin@myserver;Password=myPassword;Trusted_Connection=False;Encrypt=True;

参见 https://www.connectionstrings.com/azure-sql-database/ 您的连接字符串看起来有点不同。

需要处理连接和命令。 Using...End Using 块为我们处理这个问题。您可以将 CommandTextConnection 直接传递给 Command.

的构造函数
Private Sub FillDataGridView()
    Dim ConnectionString As String = "server=tcp:<servername>.database.windows.net, 1433;Database=mmyob;Uid=sqldba;Pwd={your_password_here};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30"
    Dim dt As New DataTable
    Using conn As New SqlConnection(ConnectionString),
            cmd As New SqlCommand("SELECT * FROM COA", conn)
        conn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    DataGridView1.DataSource = dt
End Sub