C#连接变为空

时间:2010-07-12 21:10:25

标签: c# asp.net mysql null connection

我正在开发一个类来管理Mysql数据库上的操作。 我有以下代码:

 using System;
using MySql.Data.MySqlClient;

public class MysqlAccess
{
    private MySqlConnection pCnn;
    public enum OperationType {Select = 1,Insert = 2,Update = 3,Delete = 4};

    public MysqlAccess()
    {

        MySqlConnection Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);


    }

   public MySqlConnection Connection { get {return pCnn;} set {pCnn=value;} }


    public int Connect()
    {
        try
        {

            Connection.Open();

            if (Connection.State == System.Data.ConnectionState.Open)
            {
                return 1;
            }
            else
            {
                return 0;
            }

        }
        catch (Exception e)
        {
            return -1;

        }
    }



    }

}

页面加载代码

 protected void Page_Load(object sender, EventArgs e)
    {

        MysqlAccess DBManager = new MysqlAccess();


        DBManager.Connect();
        Response.Write("Connection State:" + DBManager.Connection.State.ToString());
    }

当我执行response.write连接为空时,为什么?

提前致谢!

5 个答案:

答案 0 :(得分:7)

嗯,它是null,因为你从未真正初始化Connection属性,在初始化之前它将为null。所以而不是:

public MysqlAccess()
{
    // Here you are initializing a local variable 
    // that is subject to GC and goes into the void of forgetfulness
    MySqlConnection Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);
}

初始化属性:

public MysqlAccess()
{
    var connectionString = ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString;
    // The 'this' keyword is optional here and its usage is a 
    // matter of personal preference
    this.Connection = new MySqlConnection(connectionString);
}

虽然这可能会修复你所获得的NullReferenceException,但你应该知道MySqlConnection实现了IDisposable,这意味着你应该确保调用Dispose方法来避免泄漏连接或在每个请求上创建新连接,这在Web应用程序中可能特别具有灾难性。

答案 1 :(得分:2)

在构造函数中,您没有设置属性Connection。您正在声明一个局部变量Connection。所以,你从来没有初始化属性Connection。

使用以下代码更正代码:

this.Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);

答案 2 :(得分:0)

因为您在此处将Connection声明为局部变量:

public MysqlAccess()
{

    MySqlConnection Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);


}

尝试

public MysqlAccess()
{

    Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);


}

答案 3 :(得分:0)

将构造函数更改为:

public MysqlAccess()
{
    Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);
}

答案 4 :(得分:0)

MysqlAccess构造函数中,您指定一个新的局部变量:

MySqlConnection Connection=new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalMySqlServer"].ConnectionString);

...稍后您将引用一个属性,该属性恰好与本地变量同名:

Response.Write("Connection State:" + DBManager.Connection.State.ToString());

将构造函数中的MySqlConnection Connection更改为Connection应修复它。