public abstract class DBhander : IDisposable
{
.....
public void Dispose()
{
this.Close();
}/// <summary>
/// 传入数据库连接对象创建连接
/// </summary>
public void SetConn(IDbConnection _conn)
{
conn = _conn;
cmd = conn.CreateCommand();
} /// <summary>
/// 查询条件
/// </summary>
public string conditionStr = string.Empty; public string GetValue(string tablename, string field)
{
string tempstr = "select " + field + " from " + tablename;
if (this.conditionStr != string.Empty)
{
tempstr = tempstr + " where " + this.conditionStr;
}
else
{
this.Close();
throw new ArgumentException("该方法必须要指定conditionStr变量的值!");
}
cmd.CommandText = tempstr;
return cmd.ExecuteScalar().ToString();
} /// <summary>
/// 关闭连接
/// </summary>
public void Close()
{
if (conn != null)
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
}
}
}
}
上面这个是一个数据库操作代码,
下面的类继承并创建和打开链接 /// <summary>
/// 使用默认连接
/// </summary>
public SqlServerDbHander()
{
dbType = DbType.SqlServer;
if (conn != null)
{
if (conn.State == System.Data.ConnectionState.Open)
{
SetConn(conn);
}
else
{
System.Data.SqlClient.SqlConnection tempconn = new System.Data.SqlClient.SqlConnection(connectionStr);
SetConn(tempconn);
tempconn.Open();
da = new System.Data.SqlClient.SqlDataAdapter(); }
}
else
{
System.Data.SqlClient.SqlConnection tempconn = new System.Data.SqlClient.SqlConnection(connectionStr);
SetConn(tempconn);
tempconn.Open();
da = new System.Data.SqlClient.SqlDataAdapter();
}
}
在一个GetCatalogName.cs类文件中我写了一个静态的方法
class GetCatalogName
{
....
public static string GetName(int id)
{
SqlServerDbHander sqlcmd=new SqlServerDbHander();
sqlcmd.conditionStr=" id="+id;
string returnStr=sqlcmd.GetValue("table1","field");
sqlcmd.Close();
return returnStr;
}
}
某aspx网页中调用该静态方法获取相应的值,语句如下
<%=GetCatalogName.GetName(1)%>,
<%=GetCatalogName.GetName(2)%>,
<%=GetCatalogName.GetName(3)%>,
页面报错,说GetCatalogName.cs页面 string returnStr=sqlcmd.GetValue("table1","field");没有引用到对象的实例;
当我删除<%=GetCatalogName.GetName(2)%>, <%=GetCatalogName.GetName(3)%>,这两句运行正常,单独留下任何一条语句,调用都不会出错,找了很久不知道是什么原因!
我在GetName(int id)这个方法里还有操作的底层调试发现,conn正常打开,cmd正常实例化,commandText正常,不知道为什么连续调用二次以上会出错,希望大家帮忙!
小弟万分感激!谢啦!
{
.....
public void Dispose()
{
this.Close();
}/// <summary>
/// 传入数据库连接对象创建连接
/// </summary>
public void SetConn(IDbConnection _conn)
{
conn = _conn;
cmd = conn.CreateCommand();
} /// <summary>
/// 查询条件
/// </summary>
public string conditionStr = string.Empty; public string GetValue(string tablename, string field)
{
string tempstr = "select " + field + " from " + tablename;
if (this.conditionStr != string.Empty)
{
tempstr = tempstr + " where " + this.conditionStr;
}
else
{
this.Close();
throw new ArgumentException("该方法必须要指定conditionStr变量的值!");
}
cmd.CommandText = tempstr;
return cmd.ExecuteScalar().ToString();
} /// <summary>
/// 关闭连接
/// </summary>
public void Close()
{
if (conn != null)
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
}
}
}
}
上面这个是一个数据库操作代码,
下面的类继承并创建和打开链接 /// <summary>
/// 使用默认连接
/// </summary>
public SqlServerDbHander()
{
dbType = DbType.SqlServer;
if (conn != null)
{
if (conn.State == System.Data.ConnectionState.Open)
{
SetConn(conn);
}
else
{
System.Data.SqlClient.SqlConnection tempconn = new System.Data.SqlClient.SqlConnection(connectionStr);
SetConn(tempconn);
tempconn.Open();
da = new System.Data.SqlClient.SqlDataAdapter(); }
}
else
{
System.Data.SqlClient.SqlConnection tempconn = new System.Data.SqlClient.SqlConnection(connectionStr);
SetConn(tempconn);
tempconn.Open();
da = new System.Data.SqlClient.SqlDataAdapter();
}
}
在一个GetCatalogName.cs类文件中我写了一个静态的方法
class GetCatalogName
{
....
public static string GetName(int id)
{
SqlServerDbHander sqlcmd=new SqlServerDbHander();
sqlcmd.conditionStr=" id="+id;
string returnStr=sqlcmd.GetValue("table1","field");
sqlcmd.Close();
return returnStr;
}
}
某aspx网页中调用该静态方法获取相应的值,语句如下
<%=GetCatalogName.GetName(1)%>,
<%=GetCatalogName.GetName(2)%>,
<%=GetCatalogName.GetName(3)%>,
页面报错,说GetCatalogName.cs页面 string returnStr=sqlcmd.GetValue("table1","field");没有引用到对象的实例;
当我删除<%=GetCatalogName.GetName(2)%>, <%=GetCatalogName.GetName(3)%>,这两句运行正常,单独留下任何一条语句,调用都不会出错,找了很久不知道是什么原因!
我在GetName(int id)这个方法里还有操作的底层调试发现,conn正常打开,cmd正常实例化,commandText正常,不知道为什么连续调用二次以上会出错,希望大家帮忙!
小弟万分感激!谢啦!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货