编辑3 我已使用提供的链接来更改连接,该连接有效:)现在,从数据库中提取的每条记录都会收到此消息 编辑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
由于您没有指定这是什么类型的应用程序,我假设是 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