#define DEBUGusing System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;using HRManager.DataAccessHelper;
using HRManager.CommonComponent;namespace HRManager.DataAccessLayer
{
/// <summary>
/// 类,用于数据访问的类。
/// </summary>
public class Database : IDisposable
{
/// <summary>
/// 保护变量,数据库连接。
/// </summary>
protected SqlConnection Connection; /// <summary>
/// 保护变量,数据库连接串。
/// </summary>
protected String ConnectionString;
/// <summary>
/// 构造函数。
/// </summary>
/// <param name="DatabaseConnectionString">数据库连接串</param>
public Database()
{
ConnectionString = ConfigurationManager.AppSettings["DBConnectionString"];
} /// <summary>
/// 析构函数,释放非托管资源
/// </summary>
~Database()
{
try
{
if (Connection != null)
Connection.Close();
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
try
{
Dispose();
}
catch{}
} /// <summary>
/// 保护方法,打开数据库连接。
/// </summary>
protected void Open()
{
if (Connection == null)
{
try
{
Connection = new SqlConnection(ConnectionString);
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
}
if (Connection.State.Equals(ConnectionState.Closed))
{
try
{
Connection.Open();
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
}
} /// <summary>
/// 公有方法,关闭数据库连接。
/// </summary>
public void Close()
{
try
{
if (Connection != null)
Connection.Close();
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
} /// <summary>
/// 公有方法,释放资源。
/// </summary>
public void Dispose()
{
// 确保连接被关闭
try
{
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
} /// <summary>
/// 公有方法,获取数据,返回一个SqlDataReader (调用后主意调用SqlDataReader.Close())。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>SqlDataReader</returns>
public SqlDataReader GetDataReader(String SqlString)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString,Connection);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
#if DEBUG
myEventLog.Log.Info(SqlString);
#endif
}
catch(Exception e)
{
myEventLog.Log.Debug("数据查询(GetDataReader)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
return null;
}
} /// <summary>
/// 公有方法,获取数据,返回一个DataSet。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataSet</returns>
public DataSet GetDataSet(String SqlString)
{
DataSet dataset = new DataSet();
Open();
try
{
SqlDataAdapter adapter = new SqlDataAdapter(SqlString,Connection);
adapter.Fill(dataset);
#if DEBUG
myEventLog.Log.Info(SqlString);
#endif
}
catch(Exception e)
{
myEventLog.Log.Debug("数据查询(GetDataSet)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
}
finally
{
Close();
}
return dataset;
} /// <summary>
/// 公有方法,获取数据,返回一个DataTable。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataTable</returns>
public DataTable GetDataTable(String SqlString)
{
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
return dataset.Tables[0];
} /// <summary>
/// 公有方法,获取数据,返回一个DataRow。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataRow</returns>
public DataRow GetDataRow(String SqlString)
{
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
if (dataset.Tables[0].Rows.Count>0)
{
return dataset.Tables[0].Rows[0];
}
else
{
return null;
}
} /// <summary>
/// 公有方法,执行Sql语句。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>对Update、Insert、Delete为影响到的行数,其他情况为-1</returns>
public int ExecuteSQL(String SqlString)
{
int count = -1;
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString,Connection);
count = cmd.ExecuteNonQuery();
#if DEBUG
myEventLog.Log.Info(SqlString);
#endif
}
catch(Exception e)
{
myEventLog.Log.Debug("执行数据操作(ExecuteSQL)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
count = -1;
}
finally
{
Close();
}
return count;
} /// <summary>
/// 公有方法,执行一组Sql语句。
/// </summary>
/// <param name="SqlStrings">Sql语句组</param>
/// <returns>是否成功</returns>
public bool ExecuteSQL(String[] SqlStrings)
{
bool success = true;
Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = Connection.BeginTransaction();
cmd.Connection = Connection;
cmd.Transaction = trans; int i=0;
try
{
foreach (String str in SqlStrings)
{
cmd.CommandText = str;
cmd.ExecuteNonQuery();
i++;
#if DEBUG
myEventLog.Log.Info(str);
#endif
}
trans.Commit();
}
catch(Exception e)
{
myEventLog.Log.Debug("执行数据操作(ExecuteSQL)失败,SqlString=" + SqlStrings[i] + ",系统异常信息:" + e.Message);
success = false;
trans.Rollback();
}
finally
{
Close();
}
return success;
} /// <summary>
/// 公有方法,在一个数据表中插入一条记录。
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
/// <returns>是否成功</returns>
public bool Insert(String TableName,Hashtable Cols)
{
int Count = 0; if (Cols.Count<=0)
{
return true;
} String Fields = " (";
String Values = " Values(";
foreach(DictionaryEntry item in Cols)
{
if (Count!=0)
{
Fields += ",";
Values += ",";
}
Fields += "["+item.Key.ToString()+"]";
Values += item.Value.ToString();
Count ++;
}
Fields += ")";
Values += ")"; String SqlString = "Insert into "+TableName+Fields+Values; String[] Sqls = {SqlString};
return ExecuteSQL(Sqls);
}
/// <summary>
/// 公有方法,更新一个数据表。
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
/// <param name="Where">Where子句</param>
/// <returns>是否成功</returns>
public bool Update(String TableName,Hashtable Cols,String Where)
{
int Count = 0;
if (Cols.Count<=0)
{
return true;
}
String Fields = " ";
foreach(DictionaryEntry item in Cols)
{
if (Count!=0)
{
Fields += ",";
}
Fields += "["+item.Key.ToString()+"]";
Fields += "=";
Fields += item.Value.ToString();
Count ++;
}
Fields += " "; String SqlString = "Update "+TableName+" Set "+Fields+Where; String[] Sqls = {SqlString};
return ExecuteSQL(Sqls);
}
}
}
vs2005 提示红色标记处错误,该如何解决?
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;using HRManager.DataAccessHelper;
using HRManager.CommonComponent;namespace HRManager.DataAccessLayer
{
/// <summary>
/// 类,用于数据访问的类。
/// </summary>
public class Database : IDisposable
{
/// <summary>
/// 保护变量,数据库连接。
/// </summary>
protected SqlConnection Connection; /// <summary>
/// 保护变量,数据库连接串。
/// </summary>
protected String ConnectionString;
/// <summary>
/// 构造函数。
/// </summary>
/// <param name="DatabaseConnectionString">数据库连接串</param>
public Database()
{
ConnectionString = ConfigurationManager.AppSettings["DBConnectionString"];
} /// <summary>
/// 析构函数,释放非托管资源
/// </summary>
~Database()
{
try
{
if (Connection != null)
Connection.Close();
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
try
{
Dispose();
}
catch{}
} /// <summary>
/// 保护方法,打开数据库连接。
/// </summary>
protected void Open()
{
if (Connection == null)
{
try
{
Connection = new SqlConnection(ConnectionString);
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
}
if (Connection.State.Equals(ConnectionState.Closed))
{
try
{
Connection.Open();
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
}
} /// <summary>
/// 公有方法,关闭数据库连接。
/// </summary>
public void Close()
{
try
{
if (Connection != null)
Connection.Close();
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
} /// <summary>
/// 公有方法,释放资源。
/// </summary>
public void Dispose()
{
// 确保连接被关闭
try
{
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
catch(Exception e)
{
myEventLog.Log.Debug(e.Message);
}
} /// <summary>
/// 公有方法,获取数据,返回一个SqlDataReader (调用后主意调用SqlDataReader.Close())。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>SqlDataReader</returns>
public SqlDataReader GetDataReader(String SqlString)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString,Connection);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
#if DEBUG
myEventLog.Log.Info(SqlString);
#endif
}
catch(Exception e)
{
myEventLog.Log.Debug("数据查询(GetDataReader)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
return null;
}
} /// <summary>
/// 公有方法,获取数据,返回一个DataSet。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataSet</returns>
public DataSet GetDataSet(String SqlString)
{
DataSet dataset = new DataSet();
Open();
try
{
SqlDataAdapter adapter = new SqlDataAdapter(SqlString,Connection);
adapter.Fill(dataset);
#if DEBUG
myEventLog.Log.Info(SqlString);
#endif
}
catch(Exception e)
{
myEventLog.Log.Debug("数据查询(GetDataSet)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
}
finally
{
Close();
}
return dataset;
} /// <summary>
/// 公有方法,获取数据,返回一个DataTable。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataTable</returns>
public DataTable GetDataTable(String SqlString)
{
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
return dataset.Tables[0];
} /// <summary>
/// 公有方法,获取数据,返回一个DataRow。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataRow</returns>
public DataRow GetDataRow(String SqlString)
{
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
if (dataset.Tables[0].Rows.Count>0)
{
return dataset.Tables[0].Rows[0];
}
else
{
return null;
}
} /// <summary>
/// 公有方法,执行Sql语句。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>对Update、Insert、Delete为影响到的行数,其他情况为-1</returns>
public int ExecuteSQL(String SqlString)
{
int count = -1;
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString,Connection);
count = cmd.ExecuteNonQuery();
#if DEBUG
myEventLog.Log.Info(SqlString);
#endif
}
catch(Exception e)
{
myEventLog.Log.Debug("执行数据操作(ExecuteSQL)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
count = -1;
}
finally
{
Close();
}
return count;
} /// <summary>
/// 公有方法,执行一组Sql语句。
/// </summary>
/// <param name="SqlStrings">Sql语句组</param>
/// <returns>是否成功</returns>
public bool ExecuteSQL(String[] SqlStrings)
{
bool success = true;
Open();
SqlCommand cmd = new SqlCommand();
SqlTransaction trans = Connection.BeginTransaction();
cmd.Connection = Connection;
cmd.Transaction = trans; int i=0;
try
{
foreach (String str in SqlStrings)
{
cmd.CommandText = str;
cmd.ExecuteNonQuery();
i++;
#if DEBUG
myEventLog.Log.Info(str);
#endif
}
trans.Commit();
}
catch(Exception e)
{
myEventLog.Log.Debug("执行数据操作(ExecuteSQL)失败,SqlString=" + SqlStrings[i] + ",系统异常信息:" + e.Message);
success = false;
trans.Rollback();
}
finally
{
Close();
}
return success;
} /// <summary>
/// 公有方法,在一个数据表中插入一条记录。
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
/// <returns>是否成功</returns>
public bool Insert(String TableName,Hashtable Cols)
{
int Count = 0; if (Cols.Count<=0)
{
return true;
} String Fields = " (";
String Values = " Values(";
foreach(DictionaryEntry item in Cols)
{
if (Count!=0)
{
Fields += ",";
Values += ",";
}
Fields += "["+item.Key.ToString()+"]";
Values += item.Value.ToString();
Count ++;
}
Fields += ")";
Values += ")"; String SqlString = "Insert into "+TableName+Fields+Values; String[] Sqls = {SqlString};
return ExecuteSQL(Sqls);
}
/// <summary>
/// 公有方法,更新一个数据表。
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
/// <param name="Where">Where子句</param>
/// <returns>是否成功</returns>
public bool Update(String TableName,Hashtable Cols,String Where)
{
int Count = 0;
if (Cols.Count<=0)
{
return true;
}
String Fields = " ";
foreach(DictionaryEntry item in Cols)
{
if (Count!=0)
{
Fields += ",";
}
Fields += "["+item.Key.ToString()+"]";
Fields += "=";
Fields += item.Value.ToString();
Count ++;
}
Fields += " "; String SqlString = "Update "+TableName+" Set "+Fields+Where; String[] Sqls = {SqlString};
return ExecuteSQL(Sqls);
}
}
}
vs2005 提示红色标记处错误,该如何解决?
解决方案 »
- 请问List查询
- 后台查询数据5秒,前台GridView显示却需要几分钟
- aspxgridview与gridview的区别
- 如何实现treeview和datagridview刷新的问题
- C# 获取鼠标所在位置内容
- C#中listview控件向对应列传递数据问题!在线等!
- 关于winform下用户控件的问题? 在线等!
- mobile 中调用播放器只有声音没图像
- 求《用实例学 Crystal Report for Visual Studio.NET》电子书
- treeview必须是ie什么版本以上才能看到效果
- 表格内的隐藏和显示
- 续打问题,我只想打一个界面的下部分,怎么把Graphics 分开只打下部分呢。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。源错误:
行 184: DataSet dataset = GetDataSet(SqlString);
行 185: dataset.CaseSensitive = false;
行 186: return dataset.Tables[0];
行 187: }
行 188:
堆栈跟踪:
[IndexOutOfRangeException: 无法找到表 0。]
System.Data.DataTableCollection.get_Item(Int32 index) +107
HRManager.DataAccessLayer.Database.GetDataTable(String SqlString) in d:\人才招聘\C08\HRManager\App_Code\DataAccessLayeer\Database.cs:186
HRManager.BusinessLogicLayer.City.Query(Hashtable queryItems) in d:\人才招聘\C08\HRManager\App_Code\BusinessLogicLayer\City.cs:97
JobQuery.InitData() in d:\人才招聘\C08\HRManager\JobQuery.aspx.cs:34
JobQuery.Page_Load(Object sender, EventArgs e) in d:\人才招聘\C08\HRManager\JobQuery.aspx.cs:25
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +31
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +68
System.Web.UI.Control.OnLoad(EventArgs e) +88
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3034
中取得的dataset为null;
调试的时候看下sql,应该是sql有问题
建议你断点调试一下
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
return dataset!=null&&dataset.Tables.Count>1?dataset.Tables[0]:null;
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
return dataset!=null&&dataset.Tables.Count>1?dataset.Tables[0]:new DataTable();