在命名空间中声明变量是否使其成为全局变量?

本文关键字:全局变量 是否 命名空间 声明 变量 | 更新日期: 2023-09-27 18:05:03

我正在编写一个基于windows form的应用程序,它使用database和我想把declare下面的global,这样我就可以使用vcon.open()vcon.close()open and close my database从任何形式我想要的。请告诉我怎么做。

OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=F:'workspace'RDASMS'RDASMS'rdadb.mdb");

在命名空间中声明变量是否使其成为全局变量?

正如其他人所说,"全局"静态类型通常不是最好的设计方法,但要回答您的具体问题:

namespace YourApplicationNamespace
{
    public static class MyOleDbConnection
    {
        public static OleDbConnection OleDbConnection;
        public static void Open()
        {
             // Do Something with OleDbConnection.
        }
        public static void Close()
        {
             // Do Something with OleDbConnection.
        }
    }
}

可以用作:

MyOleDbConnection.Open();
MyOleDbConnection.Close();

连接非常轻量级,因此您可以根据需要创建和关闭它们。也许像这样:

using (var conn = new OleDbConnection(connStr))
{
    // Use your connection
}

这将在阻塞退出时自动为您关闭连接。

您可能希望将字符串放在全局可访问的位置,例如Config类。

首先,您不能在命名空间中声明全局的东西。即使有可能,这也不是一个好主意。感谢您为避免代码重复所做的努力,我建议您:

  1. 在配置中放置连接字符串
  2. 声明连接并在需要时使用它,可能使用using模式。
我注意到您使用喷气发动机(Access),这可能会导致性能缺陷,因为需要打开和关闭连接,或者至少在过去是这样的。在任何情况下,请注意在需要时打开连接并在完成连接后立即关闭连接,这是在任何其他情况下都要遵循的模式。

您可以创建具有静态成员的静态类。

public static MyConnection
{
    public static OleDbConnection Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:'workspace'RDASMS'RDASMS'rdadb.mdb");
}

那么你可以这样访问它:

var vcon = MyConnection.Connection;
vcon.Open();

这样做会给程序增加不必要的复杂性。您应该创建一个严格处理数据库访问的类,如上面的MyConnection示例。您需要添加适当的方法来实际处理访问。在不断打开和关闭文件时,使用Jet提供程序可能会带来显著的性能影响。只有在连接长时间不活动时才应该关闭它。在这种情况下,你应该做更多的事情:

using(var vcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:'workspace'RDASMS'RDASMS'rdadb.mdb"))
{
    // Your code here...
}

这将在操作完成后关闭连接。但是不要忘记这可能引起的性能问题。