Visual Studio ;新建 System.Data.OleDb.OleDbConnection(strConString);代码失败-我错过了什么?
Visual Studio ;New System.Data.OleDb.OleDbConnection(strConString); code fails - what am I missing?
我正在尝试使用 Windows Forms App (.NET Framework) 模板构建 Visual Studio 19, Visual Basic 数据库应用程序。模板向导运行良好,引导我与数据库建立连接。 app.config 文件如下所示。
```
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="Paint.MySettings.PaintDBConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\PaintDB.mdf;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
```
请注意,connectionstring 和 providername 都已定义,但后者不包括“Provider=”,在我阅读的文献中经常被引用为要求。
然后我的代码转到使用数据库的表单。 Form_Load 子例程中的第一行代码之一是:
`strConString = My.Settings.PaintDBConnectionString`
执行代码时strConString的值为
"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\PaintDB.mdf;Integrated Security=True".
请注意,没有引用“Provider=System.Data.SqlClient”。
当我尝试使用以下格式建立连接时:
conDB = New System.Data.OleDb.OleDbConnection(strConString)
我因此收到异常未处理消息:
System.ArgumentException: 'An OLE DB Provider was not specified in the ConnectionString. An example would be, 'Provider=SQLOLEDB;'.'
但是,如果我使用以下代码:
Using conDB As New Data.SqlClient.SqlConnection With {.ConnectionString = My.Settings.PaintDBConnectionString}
conDB.Open()
建立连接,代码移至下一行:
da = New System.Data.OleDb.OleDbDataAdapter(strSQL, strConString)
da.Fill(ds, "Manufacturers")
“.Fill”命令失败,出现与上述相同的错误。
System.ArgumentException: 'ConnectionString 中未指定 OLE DB 提供程序。例如,'Provider=SQLOLEDB;'.'
如果我尝试以编程方式将 strConString 更正为我认为应该如下所示:
strConString = "Provider=System.Data.SqlClient;" + strConString
然后代码在“.Fill”命令中再次失败,但这次抛出异常消息如下:
System.InvalidOperationException: 'The 'System.Data.SqlClient' provider is not registered on the local machine.'
我在 Whosebug 中看到了关于这两种消息的文章,并尝试遵循解决方案但没有成功。
任何人都可以告诉我如何纠正我的工作。希望我提供的额外信息可以帮助您思考。
如果您要将 Access 用作数据库,请参考:
//Declaration of connection
Public sConnection As String = ""
Public Connection As OleDbConnection
sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filepath & ";Extended Properties=""Excel 12.0;HDR=YES"""
Connection = New OleDbConnection(sConnection)
Connection.Open()
Dim sSelect As String = "select * from [table$]"
Dim cmd As New OleDbCommand(sSelect, Connection)
Dim da As New OleDbDataAdapter(cmd)
如果您要使用 SQL 作为数据库,请参考:
//Declaration of connection
Public sqlcon As SqlConnection = New SqlConnection("Server =*servername*;User Id=*userid*;Password=*password*;Integrated Security=false;Database=*dbname*;")
Dim str as String = "SELECT * FROM table"
Dim cmd As New SqlCommand(str, sqlcon)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
Dim dt As New DataSet
da.Fill(ds, "TableDetails")
我正在尝试使用 Windows Forms App (.NET Framework) 模板构建 Visual Studio 19, Visual Basic 数据库应用程序。模板向导运行良好,引导我与数据库建立连接。 app.config 文件如下所示。
```
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="Paint.MySettings.PaintDBConnectionString" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\PaintDB.mdf;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
```
请注意,connectionstring 和 providername 都已定义,但后者不包括“Provider=”,在我阅读的文献中经常被引用为要求。
然后我的代码转到使用数据库的表单。 Form_Load 子例程中的第一行代码之一是:
`strConString = My.Settings.PaintDBConnectionString`
执行代码时strConString的值为
"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\PaintDB.mdf;Integrated Security=True".
请注意,没有引用“Provider=System.Data.SqlClient”。
当我尝试使用以下格式建立连接时:
conDB = New System.Data.OleDb.OleDbConnection(strConString)
我因此收到异常未处理消息:
System.ArgumentException: 'An OLE DB Provider was not specified in the ConnectionString. An example would be, 'Provider=SQLOLEDB;'.'
但是,如果我使用以下代码:
Using conDB As New Data.SqlClient.SqlConnection With {.ConnectionString = My.Settings.PaintDBConnectionString}
conDB.Open()
建立连接,代码移至下一行:
da = New System.Data.OleDb.OleDbDataAdapter(strSQL, strConString)
da.Fill(ds, "Manufacturers")
“.Fill”命令失败,出现与上述相同的错误。
System.ArgumentException: 'ConnectionString 中未指定 OLE DB 提供程序。例如,'Provider=SQLOLEDB;'.'
如果我尝试以编程方式将 strConString 更正为我认为应该如下所示:
strConString = "Provider=System.Data.SqlClient;" + strConString
然后代码在“.Fill”命令中再次失败,但这次抛出异常消息如下:
System.InvalidOperationException: 'The 'System.Data.SqlClient' provider is not registered on the local machine.'
我在 Whosebug 中看到了关于这两种消息的文章,并尝试遵循解决方案但没有成功。
任何人都可以告诉我如何纠正我的工作。希望我提供的额外信息可以帮助您思考。
如果您要将 Access 用作数据库,请参考:
//Declaration of connection
Public sConnection As String = ""
Public Connection As OleDbConnection
sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filepath & ";Extended Properties=""Excel 12.0;HDR=YES"""
Connection = New OleDbConnection(sConnection)
Connection.Open()
Dim sSelect As String = "select * from [table$]"
Dim cmd As New OleDbCommand(sSelect, Connection)
Dim da As New OleDbDataAdapter(cmd)
如果您要使用 SQL 作为数据库,请参考:
//Declaration of connection
Public sqlcon As SqlConnection = New SqlConnection("Server =*servername*;User Id=*userid*;Password=*password*;Integrated Security=false;Database=*dbname*;")
Dim str as String = "SELECT * FROM table"
Dim cmd As New SqlCommand(str, sqlcon)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
Dim dt As New DataSet
da.Fill(ds, "TableDetails")