我正在开发一个类来管理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连接为空时,为什么?
提前致谢!
答案 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
应修复它。