Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用ODBC和VB项目连接数据库时遇到的问题_Vb.net_Odbc_Azure Sql Database - Fatal编程技术网

Vb.net 使用ODBC和VB项目连接数据库时遇到的问题

Vb.net 使用ODBC和VB项目连接数据库时遇到的问题,vb.net,odbc,azure-sql-database,Vb.net,Odbc,Azure Sql Database,编辑3 我已经使用提供的链接来更改连接,这是有效的:)现在我从数据库中提取的每条记录都有这条消息 编辑2:没有ODBC的原因,只是它是第一个结果,代码如下所示 我使用SQL Server ODBC驱动程序17 x64运行VS Studio 2017 Pro。在运行应用程序时,我遇到了这个问题,是否缺少一个步骤 操作系统:Windows 10 Pro x64(Build 2004) System.invalidoOperationException HResult=0x80131509 消息=本地

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

操作系统:Windows 10 Pro x64(Build 2004)

System.invalidoOperationException
HResult=0x80131509
消息=本地计算机上未注册“SQL Server=tcp:.database.windows.net的Odbc驱动程序17,1433”提供程序。
Source=System.Data
堆栈跟踪:
位于System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr、DataSourceWrapper和datasrcWrapper)
在System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection connection)
在System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions选项、DbConnectionPoolKey poolKey、Object poolGroupProviderInfo、DbConnectionPool池、DbConnectionOwningObject)
位于System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions选项、DbConnectionPoolKey poolKey、Object poolGroupProviderInfo、DbConnectionPool池、DbConnectionOwningConnection、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection-owningConnection、DbConnectionPoolGroup-poolGroup、DbConnectionOptions-userOptions)
位于System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal oldConnection、DbConnectionInternal&connection)
位于System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource`1重试,DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource`1重试、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)
在System.Data.OleDb.OleDbConnection.Open()处
在C:\MMYOB\MMYOB\CoA.vb中的MMYOB.CoA.CoA_加载(对象发送器,事件参数e):第11行
在System.Windows.Forms.Form.OnLoad(EventArgs e)中
在System.Windows.Forms.Form.OnCreateControl()中
位于System.Windows.Forms.Control.CreateControl(布尔值不可修改)
在System.Windows.Forms.Control.CreateControl()中
在System.Windows.Forms.Control.WmShowWindow(Message&m)中
位于System.Windows.Forms.Control.WndProc(Message&m)
在System.Windows.Forms.ScrollableControl.WndProc(Message&m)中
在System.Windows.Forms.Form.WmShowWindow(消息和消息)
在System.Windows.Forms.Form.WndProc(Message&m)中
在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)中
在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)中
在System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr lparam)
'创建连接对象
Dim ConnectionString As String=“provider=Odbc Driver 17 For SQL Server”+“Server=tcp:.database.windows.net,1433;database=mmyob;Uid=sqldba;Pwd={your_password_here};Encrypt=yes;TrustServerCertificate=no;连接超时=30”
Dim SQL As String=“选择*来自COA”
尺寸连接为OleDb.OleDb连接=新OleDb.OleDb连接(连接字符串)
'打开连接
康涅狄格州公开赛
'创建OleDbDataAdapter对象
作为OleDbDataAdapter的Dim适配器=新OleDbDataAdapter()
adapter.SelectCommand=新的OleDbCommand(SQL,conn)
'创建数据集对象
Dim ds As数据集=新数据集(“COA”)
'调用DataAdapter的Fill方法以从
'数据集的DataAdapter
适配器填充(ds)
'将数据集绑定到DataGrid控件
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;
请看,您的连接字符串看起来有点不同

需要处理连接和命令<代码>使用…结束使用块为我们解决这个问题。您可以将
命令文本
连接
直接传递给
命令的构造函数

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
Private子FillDataGridView()
Dim ConnectionString As String=“server=tcp:.database.windows.net,1433;database=mmyob;Uid=sqldba;Pwd={your_password_here};Encrypt=yes;TrustServerCertificate=no;连接超时=30”
Dim dt作为新数据表
将conn用作新的SqlConnection(ConnectionString),
cmd作为新的SqlCommand(“从COA中选择*,conn)
康涅狄格州公开赛
dt.Load(命令执行器读取程序)
终端使用
DataGridView1.DataSource=dt
端接头

首先,为什么要使用ODBC?可能有一个合理的原因,但一般来说,您应该使用
SqlClient
提供程序作为SQL Server的首选,并且只有在有特定原因时才使用OLE DB或ODBC。堆栈跟踪似乎表明您使用的是OLE DB而不是ODBC,尽管错误消息确实提到了ODBC。我并没有特别意识到这一点,但该错误消息表明您正在使用的OLE DB提供程序是ODBC驱动程序的包装器。也许你应该先做你应该做的,然后向我们展示你的代码,包括你正在使用的连接字符串。当然,如果您使用
SqlClient
,整个问题就会消失。那么您似乎没有充分的理由使用oledb或ODBC
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