声明命名空间中的变量使其成为全局变量

时间:2013-03-20 19:06:45

标签: c# winforms

我正在编写一个使用windows formdatabase的基于declare的应用程序 我希望将以下global vcon.open()作为vcon.close(),以便我可以使用open and close my databaseOleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\workspace\RDASMS\RDASMS\rdadb.mdb"); 到{{1}}我想要的形式。请告诉我们该怎么做。

{{1}}

4 个答案:

答案 0 :(得分:1)

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

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

当块退出时,这将自动关闭连接。

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

答案 1 :(得分:0)

首先,您无法在命名空间中声明全局内容。即使有可能,这也不是一个好主意。鉴于您在避免代码重复方面的努力,我建议您:

  1. 将连接字符串放在配置中。
  2. 声明连接并在需要时使用它,也许使用使用模式。
  3. 关于2的观点:我注意到你使用喷气发动机(Access),这可能会因按需打开和关闭连接而导致性能下降,或者至少就像过去一样。在任何情况下都要注意,不要在需要时打开连接,并在完成后立即关闭,这是其他任何情况下都要遵循的模式。

答案 2 :(得分:0)

正如其他人所说,“全球”静态类型通常不是 最佳设计方法,而是回答您的具体问题:

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();

答案 3 :(得分:0)

您可以使用静态成员创建静态类。

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...
}

一旦您的操作完成,这将关闭连接。但是不要忘记可能因此产生的性能问题。