问题描述
在VB .NET 2019中,我有一些代码可以连接到Oracle数据库:
Private Const connectionString = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=someSource;User ID=someUser;Password=somePassword"
Public Function Connect() As Object
Connect = CreateObject("ADODB.Connection")
Connect.ConnectionString = connectionString
Connect.CursorLocation = 3
Connect.Open
...
End Function
此代码可以正常工作。现在,我正在尝试将connectionString定义移动到app.config文件。
app.config:
<connectionStrings>
<add name="TestConnection" connectionString="Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=someSource;User ID=someUser;Password=somePassword" />
</connectionStrings>
在我的代码中,我只是对此进行了更改:
Connect.ConnectionString = connectionString
通过:
Connect.ConnectionString = ConfigurationManager.ConnectionStrings("TestConnection").ConnectionString
运行代码时,出现以下错误: System.NullReferenceException:'对象引用未设置为对象的实例。 System.Configuration.ConnectionStringSettingsCollection.this [string] .get返回为空。
我不知道自己在做什么错
解决方法
我不确定您做错了什么,但我只是测试了您描述的情况,对我来说效果很好。在这种情况下,您应该始终创建一个测试项目,以隔离遇到困难的特定功能以对其进行特定测试。这是我所做的:
- 创建一个新的WinForms项目。
- 创建一个新的类库项目。
- 在两个项目中都引用System.Configuration.dll。
- 在WinForms项目中引用类库项目。
- 将适当的连接字符串添加到WinForms项目中的App.config文件中。
- 在“类库”项目中添加一个读取该连接字符串的类。
- 在WinForms项目中创建库类的实例,并获取其读取的连接字符串。
这是我的App.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="TestConnection" connectionString="Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True"/>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>
这是我的图书馆课:
Imports System.Configuration
Public Class Class1
Public Property ConnectionString As String
Public Sub New()
ConnectionString = ConfigurationManager.ConnectionStrings("TestConnection").ConnectionString
End Sub
End Class
这是我的表单类:
Imports System.Configuration
Imports ClassLibrary1
Public Class Form1
Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
Dim testConnectionString = ConfigurationManager.ConnectionStrings("TestConnection").ConnectionString
Debug.WriteLine(testConnectionString)
End Sub
Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click
Dim obj As New Class1
Debug.WriteLine(obj.ConnectionString)
End Sub
End Class
运行该WinForms项目并单击Buttons
时,两次都在“输出”窗口中看到正确的连接字符串。如果您可以执行相同的操作并获得相同的结果,那么您知道应该起作用的方法确实起作用。然后,您需要查找此测试方案与现有项目之间的差异。