DataAccess
来源:互联网 发布:美拍视频怎么传到淘宝 编辑:程序博客网 时间:2024/05/29 09:05
using System;
using System.Data;
using System.Data.OleDb;
using System.ComponentModel;
/// <summary>
/// DataAccess layer defined to manage database [Selects,Inserts,Updates]
/// for anyone table.
/// <remarks>
/// In this class, Sql Command objects with parameter collections and
/// datasets have been used throughout since in each of the Select,
/// Insert and Update cases the code is working with a single dataset
/// containing a data table.
/// </remarks>
/// <remarks>
/// This class uses Dispose semantics for closing the active
/// database connection.
/// </remarks>
/// </summary>
///
public class DataAccess
{
/// <summary>
/// DataBase connect string.
/// </summary>
private OleDbConnection m_oleDbConn;
public DataAccess()
{
}
/// <summary>
/// <remarks>Initialize the internal OleDbConnection object.</remarks>
/// </summary>
private OleDbConnection GetConnection()
{
try
{
String strDbConnection = "";
strDbConnection = NexcashConfiguration.GetNexCashConfiguration.GetDataBaseConnectionString;
if (strDbConnection.StartsWith("Provider=Microsoft.Jet"))
strDbConnection = strDbConnection.Replace("[AppDomainPath]", AppDomain.CurrentDomain.BaseDirectory);
return new OleDbConnection(strDbConnection.Trim());
}
catch (Exception error)
{
throw new Exception(error.ToString());
return null;
}
}
private void GetLoadConnection()
{
try
{
String strDbConnection = "";
strDbConnection = NexcashConfiguration.GetNexCashConfiguration.GetDataBaseConnectionString;
if (strDbConnection.StartsWith("Provider=Microsoft.Jet"))
strDbConnection = strDbConnection.Replace("[AppDomainPath]", AppDomain.CurrentDomain.BaseDirectory);
m_oleDbConn = new OleDbConnection(strDbConnection.Trim());
m_oleDbConn.Open();
}
catch (Exception error)
{
throw new Exception(error.ToString());
}
}
/// <summary>
/// execute select sentence.
/// This function is substituted,but in order to compatibility,reserve it.
/// recommend use of GetQueryData function.this function return value is true or false.
/// </summary>
/// <param name="strSelect">import select sentence.</param>
/// <returns>DataSet, a dataset containing detailed table information by execute select sentence.</returns>
public DataSet ExecuteSQL(String strSelect)
{
DataSet data = new DataSet();
try
{
//
// Get the load connection
//
GetLoadConnection();
OleDbCommand oleCommand = new OleDbCommand(strSelect);
//oleCommand.CommandType = CommandType.Text ;
oleCommand.Connection = m_oleDbConn;
OleDbDataAdapter dsCommand = new OleDbDataAdapter(oleCommand);
dsCommand.Fill(data);
}
catch (Exception error)
{
throw new Exception(error.ToString());
//return false;
}
finally
{
m_oleDbConn.Close();
m_oleDbConn.Dispose();
}
return data;
}
public DataSet ExecuteSQL(String strSelect, string Connectionstring)
{
DataSet data = new DataSet();
try
{
//
// Get the load connection
//
OleDbCommand oleCommand = new OleDbCommand(strSelect);
//oleCommand.CommandType = CommandType.Text ;
oleCommand.Connection = new OleDbConnection(Connectionstring);
OleDbDataAdapter dsCommand = new OleDbDataAdapter(oleCommand);
dsCommand.Fill(data);
}
catch (Exception error)
{
throw new Exception(error.ToString());
//return false;
}
return data;
}
/// <summary>
/// execute update sentence.
///
/// </summary>
/// <param name="strUpdate">import update sentence.</param>
/// <returns>Success,return true;error,return false.</returns>
public bool UpdateManipulate(String strUpdate)
{
try
{
//
// Get the load connection
//
GetLoadConnection();
OleDbCommand oleCommand = new OleDbCommand(strUpdate);
//oleCommand.CommandType = CommandType.Text ;
oleCommand.Connection = m_oleDbConn;
oleCommand.ExecuteNonQuery();
return true;
}
catch (Exception error)
{
//throw new Exception (error.ToString ());
return false;
}
m_oleDbConn.Close();
} //Function UpdateManipulate
/// <summary>
/// execute select sentence.
/// This function is substituted,but in order to compatibility,reserve it.
/// recommend use of GetQueryData function.this function return value is true or false.
/// </summary>
/// <param name="strTableName">Import table name.</param>
/// <param name="strSQL">import select sentence.</param>
/// <returns>DataSet, a dataset containing detailed table information by execute select sentence.</returns>
public DataSet GetQueryData(string strTableName, string strSQL)
{
DataSet data = new DataSet();
OleDbCommand oleCommand = null;
try
{
//
// Get the load connection
//
//GetLoadConnection();
oleCommand = new OleDbCommand(strSQL);
//oleCommand.CommandType = CommandType.Text ;
oleCommand.Connection = GetConnection();
OleDbDataAdapter dsAdapter = new OleDbDataAdapter(oleCommand);
OleDbCommandBuilder cbBuilder = new OleDbCommandBuilder(dsAdapter);
try
{
dsAdapter.DeleteCommand = cbBuilder.GetDeleteCommand();
dsAdapter.InsertCommand = cbBuilder.GetInsertCommand();
dsAdapter.UpdateCommand = cbBuilder.GetUpdateCommand();
}
catch (System.Exception)
{
}
if (strTableName == null || strTableName.Trim() == "")
{
dsAdapter.Fill(data);
data.Tables[0].ExtendedProperties.Add("adapter", dsAdapter);
}
else
{
dsAdapter.Fill(data, strTableName);
data.Tables[strTableName].ExtendedProperties.Add("adapter", dsAdapter);
}
}
catch (Exception error)
{
throw new Exception(error.ToString());
}
// finally
// {
// oleCommand.Connection.Close ();
// oleCommand.Connection.Dispose ();
// }
return data;
} //Function GetQueryData
/// <summary>
/// execute select sentence.
/// </summary>
/// <param name="dsData">DataSet, a dataset containing detailed table information.</param>
/// <param name="strTableName">Import table name.</param>
/// <param name="strSQL">import select sentence.</param>
/// <returns>Success,return true;error,return false.</returns>
public bool GetQueryData(DataSet dsData, String strTableName, String strSQL)
{
DataSet data = dsData;
OleDbCommand oleCommand = null;
try
{
//
// Get the load connection
//
//GetLoadConnection();
oleCommand = new OleDbCommand(strSQL);
oleCommand.Connection = GetConnection();
OleDbDataAdapter dsAdapter = new OleDbDataAdapter(oleCommand);
OleDbCommandBuilder cbBuilder = new OleDbCommandBuilder(dsAdapter);
try
{
dsAdapter.DeleteCommand = cbBuilder.GetDeleteCommand();
dsAdapter.InsertCommand = cbBuilder.GetInsertCommand();
dsAdapter.UpdateCommand = cbBuilder.GetUpdateCommand();
}
catch (System.Exception)
{
}
if (strTableName == null || strTableName.Trim() == "")
{
dsAdapter.Fill(data);
data.Tables[0].ExtendedProperties.Add("adapter", dsAdapter);
}
else
{
dsAdapter.Fill(data, strTableName);
if (data.Tables[strTableName].ExtendedProperties.Contains("adapter"))
data.Tables[strTableName].ExtendedProperties.Remove("adapter");
data.Tables[strTableName].ExtendedProperties.Add("adapter", dsAdapter);
}
return true;
}
catch (System.SystemException er)
{
return false;
}
// finally
// {
// oleCommand.Connection.Close ();
// oleCommand.Connection.Dispose ();
// }
} //Function GetQueryData
/// <summary>
/// execute update sentence.
/// </summary>
/// <param name="dsData">DataSet,a dataset containing detailed table information.</param>
/// <param name="strTableName">Import table name.</param>
/// <returns>Success,return true;error,return false.</returns>
public bool UpdateQueryData(DataSet dsData, string strTableName)
{
OleDbDataAdapter dsCommand = null;
try
{
//
// Get the load connection
//
//GetLoadConnection();
if (strTableName == null || strTableName.Trim() == "")
{
dsCommand = (OleDbDataAdapter)dsData.Tables[0].ExtendedProperties["adapter"];
//dsCommand.SelectCommand.Connection =GetConnection();
dsCommand.Update(dsData, dsData.Tables[0].TableName);
}
else
{
dsCommand = (OleDbDataAdapter)dsData.Tables[strTableName].ExtendedProperties["adapter"];
//dsCommand.SelectCommand.Connection = GetConnection();
dsCommand.Update(dsData, strTableName);
}
return true;
}
catch (Exception error)
{
return false;
}
// finally
// {
// dsCommand.SelectCommand.Connection .Close ();
// dsCommand.SelectCommand.Connection .Dispose ();
// }
}
public bool ExecuteDML(String strSQL)
{
try
{
//
// Get the load connection
//
GetLoadConnection();
OleDbCommand oleCommand = new OleDbCommand(strSQL);
oleCommand.Connection = m_oleDbConn;
//oleCommand.CommandText = strSQL ;
//oleCommand.CommandType = CommandType.Text ;
//OleDbDataAdapter dsAdapter = new OleDbDataAdapter (oleCommand);
oleCommand.ExecuteNonQuery();
return true;
}
catch (System.Data.OleDb.OleDbException ex)
{
ex.ToString();
return false;
}
// finally
// {
// m_oleDbConn.Close ();
// m_oleDbConn.Dispose ();
// }
}
public object ExecuteScalar(string strSQL)
{
GetLoadConnection();
OleDbCommand oleCommand = new OleDbCommand(strSQL);
oleCommand.Connection = m_oleDbConn;
oleCommand.CommandText = strSQL;
return oleCommand.ExecuteScalar();
}
/// <summary>
/// 生成CrossTable数据
/// -----------sample--------
/// public class testunit
///{
///[Test]
///public void testcrosstable()
///{
/// DataAccess s=new DataAccess();
/// string sql="SELECT READERID,READERNAME, PROJECTID,PLACE FROM READER";
/// string crosssql="SELECT PROJECTID,PROJECTNAME FROM PROJECT WHERE PROJECTTYPE=1";
/// DataSet ds=s.GetCrossTab(sql,crosssql);
/// ds.Tables[0].Rows[0][2]=true;
/// s.UpdateCrossTab(ds);
/// ds=s.GetCrossTab(sql,crosssql);
/// Assert.AreEqual(ds.Tables[0].Rows[0][2].ToString(),"True");
///}
///}
/// </summary>
/// <param name="Sql"></param>
/// <param name="CrossSql"></param>
/// <param name="CrossValueCol"></param>
/// <param name="CrossDisplayCol"></param>
/// <returns></returns>
public DataSet GetCrossTab(string Sql, string CrossSql)
{
try
{
Sql = Sql.ToUpper();
CrossSql = CrossSql.ToUpper();
DataSet dsSrcData = GetQueryData("Src", Sql); //获取原始数据
DataSet dsCrossData = GetQueryData("Cross", CrossSql); //获取相关联的交叉表字段信息
DataSet dsResultData = new DataSet(); //定义要返回的交叉表数据集对象
DataTable tblResult = new DataTable("result"); //定义要返回的交叉表对象
string CrossValueCol = dsCrossData.Tables["Cross"].Columns[0].ColumnName;
string CrossDisplayCol = dsCrossData.Tables["Cross"].Columns[1].ColumnName;
//-------以下开始生成交叉表的字段结构----------------------------
for (int i = 0; i < dsSrcData.Tables["Src"].Columns.Count; i++)
{
if (dsSrcData.Tables["Src"].Columns[i].ColumnName != CrossValueCol) //判断如果不是要交叉的字段信息,就在返回表中加入该字段
tblResult.Columns.Add(dsSrcData.Tables["Src"].Columns[i].ColumnName, dsSrcData.Tables["Src"].Columns[i].DataType);
else
for (int n = 0; n < dsCrossData.Tables["Cross"].Rows.Count; n++)
{
DataColumn col = new DataColumn(dsCrossData.Tables["Cross"].Rows[n][CrossDisplayCol].ToString(), true.GetType());
col.ExtendedProperties.Add("mappingvalue", dsCrossData.Tables["Cross"].Rows[n][CrossValueCol]);
tblResult.Columns.Add(col);
}
}
//------以下开始根据原始数据生成交叉表的数据---------------------
for (int m = 0; m < dsSrcData.Tables["Src"].Rows.Count; m++)
{
DataRow drTemp = tblResult.NewRow();
string tempvalue;
for (int i = 0; i < dsSrcData.Tables["Src"].Columns.Count; i++)
{
if (dsSrcData.Tables["Src"].Columns[i].ColumnName != CrossValueCol) //判断如果不是要交叉的字段信息,就在返回表中加入该字段
drTemp[dsSrcData.Tables["Src"].Columns[i].ColumnName] = dsSrcData.Tables["Src"].Rows[m][dsSrcData.Tables["Src"].Columns[i].ColumnName];
else
{
tempvalue = dsSrcData.Tables["Src"].Rows[m][dsSrcData.Tables["Src"].Columns[i].ColumnName].ToString();
for (int n = 0; n < dsCrossData.Tables["Cross"].Rows.Count; n++)
{
if (tempvalue == dsCrossData.Tables["Cross"].Rows[n][CrossValueCol].ToString())
drTemp[dsCrossData.Tables["Cross"].Rows[n][CrossDisplayCol].ToString()] = true;
else
drTemp[dsCrossData.Tables["Cross"].Rows[n][CrossDisplayCol].ToString()] = false;
}
}
}
tblResult.Rows.Add(drTemp);
}
dsResultData.Tables.Add(tblResult);
dsResultData.Tables.Add(dsSrcData.Tables[0].Copy());
dsResultData.Tables.Add(dsCrossData.Tables[0].Copy());
return dsResultData;
}
catch (System.Exception error)
{
return null;
}
}
/// <summary>
/// ---------------sample----------------------------
/// [Test]
/// public void testcrosstable2()
/// {
/// DataAccess s=new DataAccess();
/// string sql="SELECT READERID,READERNAME FROM READER";
/// string mappingsql="SELECT USEID,READERID,PROJECTID FROM USER_PROJECT";
/// string crosssql="SELECT PROJECTID,PROJECTNAME FROM PROJECT WHERE PROJECTTYPE=0";
/// DataSet ds=s.GetCrossTab(sql,mappingsql,crosssql);
/// ds.Tables[0].Rows[0][2]=true;
/// ds.Tables[0].Rows[0][3]=true;
/// ds.Tables[0].Rows[0][4]=true;
/// ds.Tables[0].Rows[0][5]=true;
/// ds.Tables[0].Rows[0][6]=true;
/// s.UpdateCrossTab(ds);
/// ds=s.GetCrossTab(sql,mappingsql,crosssql);
/// Assert.AreEqual(ds.Tables[0].Rows[0][6].ToString(),"True");
/// }
/// </summary>
/// <param name="Sql"></param>
/// <param name="MappingSql"></param>
/// <param name="CrossSql"></param>
/// <returns></returns>
public DataSet GetCrossTab(string Sql, string MappingSql, string CrossSql)
{
try
{
Sql = Sql.ToUpper();
MappingSql = MappingSql.ToUpper();
CrossSql = CrossSql.ToUpper();
DataSet dsSrcData = GetQueryData("Src", Sql); //获取原始数据
DataSet dsMappingData = GetQueryData("Mapping", MappingSql);
DataSet dsCrossData = GetQueryData("Cross", CrossSql); //获取相关联的交叉表字段信息
DataSet dsResultData = new DataSet(); //定义要返回的交叉表数据集对象
DataTable tblResult = new DataTable("result"); //定义要返回的交叉表对象
string CrossValueCol = dsCrossData.Tables["Cross"].Columns[0].ColumnName;
string CrossDisplayCol = dsCrossData.Tables["Cross"].Columns[1].ColumnName;
//-------以下开始生成交叉表的字段结构----------------------------
for (int i = 0; i < dsSrcData.Tables["Src"].Columns.Count; i++)
{
tblResult.Columns.Add(dsSrcData.Tables["Src"].Columns[i].ColumnName, dsSrcData.Tables["Src"].Columns[i].DataType);
}
for (int n = 0; n < dsCrossData.Tables["Cross"].Rows.Count; n++)
{
DataColumn col = new DataColumn(dsCrossData.Tables["Cross"].Rows[n][CrossDisplayCol].ToString(), true.GetType());
col.DefaultValue = false;
col.ExtendedProperties.Add("mappingvalue", dsCrossData.Tables["Cross"].Rows[n][CrossValueCol]);
tblResult.Columns.Add(col);
}
//------以下开始根据原始数据生成交叉表的数据---------------------
for (int m = 0; m < dsSrcData.Tables["Src"].Rows.Count; m++)
{
DataRow drTemp = tblResult.NewRow();
for (int i = 0; i < dsSrcData.Tables["Src"].Columns.Count; i++)//判断如果不是要交叉的字段信息,就在返回表中加入该字段
{
drTemp[dsSrcData.Tables["Src"].Columns[i].ColumnName] = dsSrcData.Tables["Src"].Rows[m][dsSrcData.Tables["Src"].Columns[i].ColumnName];
}
//-----------------------------------------------------------
string MappingCol = dsMappingData.Tables[0].Columns[1].ColumnName;
string strFilter = MappingCol + "=";
strFilter = strFilter + dsSrcData.Tables["Src"].Rows[m][MappingCol].ToString();
dsMappingData.Tables[0].DefaultView.RowFilter = strFilter;
for (int n = 0; n < dsMappingData.Tables[0].DefaultView.Count; n++)
{
dsCrossData.Tables[0].DefaultView.RowFilter = dsCrossData.Tables[0].Columns[0].ColumnName + "=" + dsMappingData.Tables[0].DefaultView[n][2].ToString();
drTemp[dsCrossData.Tables[0].DefaultView[0][1].ToString()] = true;
}
tblResult.Rows.Add(drTemp);
}
dsResultData.Tables.Add(tblResult);
dsResultData.Tables.Add(dsSrcData.Tables[0].Copy());
dsResultData.Tables.Add(dsMappingData.Tables[0].Copy());
dsResultData.Tables.Add(dsCrossData.Tables[0].Copy());
return dsResultData;
}
catch (System.Exception error)
{
return null;
}
}
/// <summary>
/// 更新CrossTable数据
/// </summary>
/// <param name="Sql"></param>
/// <param name="CrossSql"></param>
/// <param name="CrossValueCol"></param>
/// <param name="CrossDisplayCol"></param>
/// <param name="CrossData"></param>
/// <returns></returns>
public bool UpdateCrossTab(DataSet CrossData)
{
if (CrossData.Tables.Count == 3)
return UpdateTwoCross(CrossData);
else
return UpdateThreeCross(CrossData);
}
private bool UpdateTwoCross(DataSet CrossData)
{
DataTable dtResult = CrossData.Tables["result"];
DataTable dtSrc = CrossData.Tables["Src"];
DataTable dtCross = CrossData.Tables["Cross"];
bool IsBind;
string ColName;
string Val;
for (int i = 0; i < dtResult.Rows.Count; i++)
{
IsBind = false;
for (int n = 0; n < dtCross.Rows.Count; n++)
{
ColName = dtCross.Rows[n][1].ToString();
Val = dtResult.Rows[i][ColName].ToString();
if (Val == "True")
{
dtSrc.Rows[i][dtCross.Columns[0].ColumnName] = dtCross.Rows[n][0];
IsBind = true;
break;
}
}
if (IsBind == false)
dtSrc.Rows[i][dtCross.Columns[0].ColumnName] = DBNull.Value;
}
this.UpdateQueryData(CrossData, "Src");
return true;
}
private bool UpdateThreeCross(DataSet CrossData)
{
DataTable dtResult = CrossData.Tables["result"];
DataTable dtSrc = CrossData.Tables["Src"];
DataTable dtCross = CrossData.Tables["Cross"];
DataTable dtMapping = CrossData.Tables["Mapping"];
string strMappingCol;
string strCrossCol;
for (int i = 0; i < dtResult.Rows.Count; i++)
{
strMappingCol = dtMapping.Columns[1].ColumnName;
dtMapping.DefaultView.RowFilter = strMappingCol + "=" + dtResult.Rows[i][strMappingCol].ToString();
for (int n = dtMapping.DefaultView.Count - 1; n >= 0; n--)//把原来的交叉纪录删除
dtMapping.DefaultView[n].Row.Delete();
for (int m = 0; m < dtCross.Rows.Count; m++)
{
strCrossCol = dtCross.Rows[m][1].ToString();
if (dtResult.Rows[i][strCrossCol].ToString() == "True") //判断该交叉数据是否被选中
{
DataRow drRow = dtMapping.NewRow();
drRow[1] = dtResult.Rows[i][strMappingCol];
drRow[2] = dtCross.Rows[m][0];
dtMapping.Rows.Add(drRow);
}
}
}
this.UpdateQueryData(CrossData, "Mapping");
return true;
}
/// <summary>
/// ------------example---------------------
/// [Test]
///public void testtransaction()
///{
///
///DataAccess s=new DataAccess();
///DataSet ds=s.GetQueryData("work","select * from reader");
///ds.Tables[0].Rows[0][5]="ok";
///OleDbTransaction trans=s.GetTansaction(ds,"");
///s.UpdateQueryData(ds,"work");
///trans.Commit();
/// }
/// </summary>
/// <param name="trans"></param>
/// <param name="DS"></param>
/// <returns></returns>
public OleDbTransaction GetTansaction(DataSet DS, string TableName)
{
OleDbDataAdapter adapter;
OleDbTransaction trans;
try
{
if (TableName != "")
adapter = (OleDbDataAdapter)DS.Tables[TableName].ExtendedProperties["adapter"];
else
adapter = (OleDbDataAdapter)DS.Tables[0].ExtendedProperties["adapter"];
if (adapter.SelectCommand.Connection.State == System.Data.ConnectionState.Closed)
{
adapter.SelectCommand.Connection = GetConnection();
adapter.InsertCommand.Connection = adapter.SelectCommand.Connection;
adapter.DeleteCommand.Connection = adapter.SelectCommand.Connection;
adapter.UpdateCommand.Connection = adapter.SelectCommand.Connection;
adapter.SelectCommand.Connection.Open();
}
trans = adapter.SelectCommand.Connection.BeginTransaction();
adapter.InsertCommand.Transaction = trans;
adapter.DeleteCommand.Transaction = trans;
adapter.UpdateCommand.Transaction = trans;
return trans;
}
catch (System.Exception error)
{
string s = error.ToString();
return null;
}
}
}
- DataAccess
- DataAccess 学习
- DALFactory--DataAccess---
- DataAccess.cs
- 数据访问层DataAccess
- 中小系统.net DataAccess数据访问类
- 中小系统.net DataAccess数据访问类
- Enterprise Library1.0 -- DataAccess Application Block
- 中小系统.net DataAccess数据访问类
- PWMIS DataAccess Framework For .NET (PDF.NET)
- Enterprise Library1.0 -- DataAccess Application Block
- 中小系统.net DataAccess数据访问类
- oledb的类库Common和DataAccess
- 数据库操作经典类[DataAccess.cs]
- Ibatisnet源码解读(3)—DataAccess
- C# 使用Oracle.DataAccess.dll注意事项
- 第40章、通用类DataAccess
- DataAccess层连接数据库(初级C#)
- 总结一致性哈希(Consistent Hashing)
- 用于主题检测的临时日志(c2945428-c3e2-4693-8bff-93b76dd3a846 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- DAL
- 金山词霸2009牛津版
- [转]如何获取Linux命令的源代码
- DataAccess
- java assert的使用
- Xshell不能按退格、删除键和中文乱码的解决方案
- 为dedecms后台管理的列表加上编号(非id,一页中条目顺序编号)
- STL中List 的sort 比较 用法示例
- 经典C/C++面试题(转载)
- DataAccessLayer
- 笑话
- 转:arcmap.exe运行错误的解决方法