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")