我觉得这个接口应该能提供这样的功能:
执行SQL查询语句,能返回DataTable,DataSet,DataReader,记录的第一行第一列;
执行添加,修改,删除的SQL语句;
能执行存储过程;
各个方法都重载了,分带SQL参数,与不带SQL参数。
这个接口能适合Access,SqlServer,Oracel等数据库。当然还有其他功能我没想到的。但是我不太会写,求高人能拿点代码出来分享分享呀!
执行SQL查询语句,能返回DataTable,DataSet,DataReader,记录的第一行第一列;
执行添加,修改,删除的SQL语句;
能执行存储过程;
各个方法都重载了,分带SQL参数,与不带SQL参数。
这个接口能适合Access,SqlServer,Oracel等数据库。当然还有其他功能我没想到的。但是我不太会写,求高人能拿点代码出来分享分享呀!
{
IDbConnection OpenConnect(string connstr);
DataSet ExeDataSet(string cmdstr);
int ExecuteNonQuery(string cmdstr);
}
public class DataBase:IDataBase
{
System.Data.OleDb.OleDbConnection cnn = null;
System.Data.OleDb.OleDbCommand cmd = null; #region IDataBase 成员
public System.Data.IDbConnection OpenConnect(string connstr)
{
cnn = new System.Data.OleDb.OleDbConnection(connstr);
return cnn;
} public System.Data.DataSet ExeDataSet(string cmdstr)
{
if (cnn != null)
{
cmd = new System.Data.OleDb.OleDbCommand(cmdstr, cnn);
DataSet ds = new DataSet(); OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
adp.Fill(ds);
return ds;
}
return null;
} //实现这个接口
public int ExecuteNonQuery(string cmdstr)
{
if (cnn != null)
{
cmd = new OleDbCommand(cmdstr, cnn);
int flag=cmd.ExecuteNonQuery();
return flag;
}
return 0;
}
#endregion
}//通过反射 调用 上面实现的DLL
public class DBMgr
{
Object InvokeClass;
DbConnection cnn;
Type t;
string cnnStr = string.Empty;
string dllPath = string.Empty;
public DBMgr()
{
cnnStr = FlysInfo.AisuoAD.Common.AppConfig.GetConnectionString();
dllPath = FlysInfo.AisuoAD.Common.AppConfig.GetDBAccessDll();
Assembly ass = Assembly.LoadFrom(dllPath);
t = ass.GetType("DB.DataBase");
InvokeClass = t.InvokeMember(
null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance,
null,
null,
null);
cnn = (DbConnection)ExeMethod("OpenConnect", cnnStr);
}
public void Open()
{
if(cnn!=null)
{
cnn.Open();
}
}
public void Close()
{
if(cnn!=null)
{
cnn.Close();
}
}
public DataSet GetDataSet(string cmd)
{
SysLog.Append(null, "执行SQL:{0}", cmd);
return (DataSet)ExeMethod("ExeDataSet", cmd);
}
public int GetNoneQuery(string cmd)
{
//FlysInfo.AisuoAD.Interface.DB.IDataBase db = (FlysInfo.AisuoAD.Interface.DB.IDataBase)InvokeClass;
// return db.ExecuteNonQuery(cmd);
SysLog.Append(null, "执行SQL:{0}",cmd);
return (int)ExeMethod("ExecuteNonQuery", cmd);
}
Mutex m = new Mutex();
private Object ExeMethod(string name, params Object[] param)
{ m.WaitOne();
Object rtn = t.InvokeMember(name, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, InvokeClass, param);
m.ReleaseMutex();
return rtn;
}
}自己配置连接字符串和DLL就行
前三段参考:http://topic.csdn.net/u/20090626/11/3564a7d4-e706-42b3-8cd2-1028ba137a31.html
中的 12 13 14 楼, 第四段内容为://=====================================================GetDataTable()============================================== #region 执行查询,并以DataTable返回结果集 GetDataTable(string sql) /**//// <summary>
/// 执行查询,并以DataTable返回结果集
/// </summary>
/// <param name="sql">SQL语句 </param>
/// <param name="cmdtype">命令类型 </param>
/// <param name="parameters">参数 </param>
/// <returns>DataTable </returns>
public DataTable GetDataTable(string sql)
{
DbParameter[] parameters = new DbParameter[0];
DataTable dt = GetDataSet(sql, CommandType.Text, parameters).Tables[0];
return dt;
}
/**//// <summary>
/// 执行查询,并以DataTable返回结果集
/// </summary>
/// <param name="sql">SQL语句 </param>
/// <param name="cmdtype">命令类型 </param>
/// <param name="parameters">参数 </param>
/// <returns>DataTable </returns>
public DataTable GetDataTable(string sql, CommandType cmdtype)
{
DbParameter[] parameters = new DbParameter[0];
DataTable dt = GetDataSet(sql, cmdtype, parameters).Tables[0];
return dt;
}
/**//// <summary>
/// 执行查询,并以DataTable返回结果集
/// </summary>
/// <param name="sql">SQL语句 </param>
/// <param name="cmdtype">命令类型 </param>
/// <param name="parameters">参数 </param>
/// <returns>DataTable </returns>
public DataTable GetDataTable(string sql, DbParameter[] parameters)
{ DataTable dt = GetDataSet(sql, CommandType.Text, parameters).Tables[0];
return dt;
} /**//// <summary>
/// 执行查询,并以DataTable返回结果集
/// </summary>
/// <param name="sql">SQL语句 </param>
/// <param name="cmdtype">命令类型 </param>
/// <param name="parameters">参数 </param>
/// <returns>DataTable </returns>
public DataTable GetDataTable(string sql, CommandType cmdtype, DbParameter[] parameters)
{
DataTable dt = GetDataSet(sql, cmdtype, parameters).Tables[0];
return dt;
} /**//// <summary>
/// 执行查询,并以DataTable返回指定记录的结果集
/// </summary>
/// <param name="sql">SQL语句 </param>
/// <param name="StartIndex">开始索引 </param>
/// <param name="RecordCount">显示记录 </param>
/// <returns>DataTable </returns>
public DataTable GetDataTable(string sql, int StartIndex, int RecordCount)
{
return GetDataSet(sql, StartIndex, RecordCount).Tables[0];
} /**//// <summary>
/// 执行查询,返回以空行填充的指定条数记录集
/// </summary>
/// <param name="sql">SQL语句 </param>
/// <param name="SizeCount">显示记录条数 </param>
/// <returns>DataTable </returns>
public DataTable GetDataTable(string sql, int SizeCount)
{
DataTable dt = GetDataSet(sql).Tables[0];
int b = SizeCount - dt.Rows.Count;
if (dt.Rows.Count < SizeCount)
{
for (int i = 0; i < b; i++)
{
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
}
}
return dt;
} #endregion }
}