【问题标题】:C# - Public Global connection to SQL Server 2005C# - 到 SQL Server 2005 的公共全局连接
【发布时间】:2013-07-25 08:42:39
【问题描述】:

我是 C# 新手,昨天才开始学习。

我已经创建了连接到 SQL Server 的类:

namespace Exchange_Ofiice.Classes
{
    public class sqlConn
    {
        public void connectionMethod()
        {
            SqlConnection myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;");
            try
            {
                myConnection.Open();
            }
            catch
            {
                MessageBox.Show("Невозможно подключиться к Базе данных. Пожалуйста обратитесь к программистам!", "Ошибка подключения к Базе данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                myConnection.Close();
            }        
        }
    }
}

另外一个用户认证类:

namespace Exchange_Ofiice.Classes
{
    public class auth:sqlConn
    {

        public void authMethod() 
        {
            SqlCommand myCommand = new SqlCommand("Command String", myConnection);                          
        }

    }
}

如何获取(使用)第二类SQL连接结果(myConnection)?

附: SqlCommand myCommand = new SqlCommand("Command String", myConnection); 行不起作用。

附言对不起,如果我有错误,我的英语不是很完美。

【问题讨论】:

  • 最好在应用程序周围共享连接string,但不要与连接共享。无论您在哪里需要连接,都应该创建一个新的,Open 它,将它用于当前的工作,然后 Close 它(或者,等效地,将它放在 using 块中)。不要尝试共享连接对象。
  • @Damien_The_Unbeliever 好的

标签: c# .net sql-server connection


【解决方案1】:

试试这个。因此,您在类中而不是函数中拥有 SQLConnection。 如果您在函数中声明某些内容,则只能在该函数中访问。

 public class sqlConn
{
    public SqlConnection myConnection;
    public void connectionMethod()
    {
        myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;");
        try
        {
            myConnection.Open();
        }
        catch
        {
            MessageBox.Show("Невозможно подключиться к Базе данных. Пожалуйста обратитесь к программистам!", "Ошибка подключения к Базе данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            myConnection.Close();
        }
    }
}

哦,您可能需要考虑将 SQLConnection 设为私有

private SqlConnection myConnection;

然后制作一个函数来检索该值。

   public SqlConnection GetConnection()
    {
        return myConnection;
    }

在另一个班级中,它将是:

SqlCommand myCommand = new SqlCommand("Command String", GetConnection());

【讨论】:

    【解决方案2】:

    首先,连接应该是类的公共字段,而不是函数变量。其次,你最终会关闭你的连接,所以你以后没有机会让它工作。

    public class sqlConn
    { 
            public SqlConnection myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;");
    
            public void connectionMethod()
            {          
                try
                {
                    myConnection.Open();
                }
                catch
                {
                    //Here goes error handling...
                }                 
        }
    }
    

    当然,在您的 authMethod 中,您应该检查连接状态,以防止在连接未初始化时出现异常。

    此外,作为一种良好做法,请确保您为连接类实现 IDisposable 接口 (http://msdn.microsoft.com/en-us/library/system.idisposable.aspx),否则您以后可能会遇到一些麻烦。

    【讨论】:

    • 谢谢。我明白我的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多