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

问题描述 投票:0回答:1

编辑3 我已使用提供的链接来更改连接,该连接有效:)现在,从数据库中提取的每条记录都会收到此消息Error Screen 编辑2:没有ODBC的原因,只是它是第一个结果,代码如下 我正在运行带有 SQL Server ODBC 驱动程序 17 x64 的 VS Studio 2017 Pro。在运行应用程序时,我遇到了这个问题,我是否缺少一个步骤

操作系统: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
vb.net odbc azure-sql-database
1个回答
0
投票

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

Azure SQL Server 连接字符串的模式看起来像这样。

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
块为我们解决了这个问题。您可以将
CommandText
Connection
直接传递给
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
© www.soinside.com 2019 - 2024. All rights reserved.