支持多类型数据库的c#数据库模型示例
发布时间:2024-01-13 16:41:15
DataAccess.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace DynamicFramework
{
public abstract class DataAccess : MarshalByRefObject
{
protected System.Data.Common.DbConnection connection;
protected string cnnstr = "";
protected DataAccess()
{
}
public static string ConnPath = System.Windows.Forms.Application.StartupPath + "\\LocalDB.mdb";
public static DataAccess LocalDb
{
get
{
return new OleAccess("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ConnPath);
//return new SqlClientAccess("Server=localhost;Trusted_Connection=true;Database=RestaurantDB");
}
}
public static DataAccess ServerDb
{
get
{
//return new OleAccess("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ConnPath);
//if (Configs.LocalConfig.Instanct.IsLocalServer)
//{
//}
//Trusted_Connection=true;
//return new SqlClientAccess("Server=.;Database=RestaurantDB,uid = sa,pwd =");
return new SqlClientAccess("Data Source=.;Initial Catalog=RestaurantDB;Persist Security Info=True;User ID=sa");
}
}
private System.Data.Common.DbCommand GetCommand(string sql, Dictionary<string, object> parameters)
{
System.Data.Common.DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
if (parameters != null)
{
foreach (KeyValuePair<string, object> item in parameters)
{
System.Data.Common.DbParameter parameter = cmd.CreateParameter();
parameter.ParameterName = item.Key;
parameter.Value = item.Value;
cmd.Parameters.Add(parameter);
}
}
return cmd;
}
#region DataAccess Command
public int ExcuteCommand(string sql,Dictionary<string,object> parameters)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return GetCommand(sql, parameters).ExecuteNonQuery();
}
}
public object ExecuteScalar(string sql, Dictionary<string, object> parameters)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return GetCommand(sql, parameters).ExecuteScalar();
}
}
public object ExecuteReader(string sql, Dictionary<string, object> parameters)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return GetCommand(sql, parameters).ExecuteReader();
}
}
public System.Data.DataTable ExecuteDataTable(string sql)
{
return ExecuteDataTable(sql, null);
}
public System.Data.DataTable ExecuteDataTable(string sql, Dictionary<string, object> parameters)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return DbHelper.ToTable(GetCommand(sql, parameters).ExecuteReader());
}
}
public List<T> ExcuteList<T>(string sql, Dictionary<string, object> parameters)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return DbHelper.ToList<T>(GetCommand(sql, parameters).ExecuteReader());
}
}
public T GetEntity<T>(string sql, Dictionary<string, object> parameters)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return DbHelper.ToEntity<T>(GetCommand(sql, parameters).ExecuteReader());
}
}
public List<T> ExcuteList<T>()
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
return DbHelper.ToList<T>(GetCommand(string.Format("select * from {0}", typeof(T).Name), null).ExecuteReader());
}
}
public System.Data.DataTable FillDataTable(string sql)
{
return FillDataTable(sql, null);
}
public System.Data.DataTable FillDataTable(string sql, Dictionary<string, object> parameters)
{
System.Data.DataTable dt = new System.Data.DataTable();
Fill(dt, GetCommand(sql, parameters));
return dt;
}
public int Fill(System.Data.DataTable dt, System.Data.Common.DbCommand cmd)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
System.Data.Common.DbDataAdapter adapter = CreateAdapter();
adapter.SelectCommand = cmd;
return adapter.Fill(dt);
}
}
public int SaveDataTable(System.Data.DataTable dt)
{
return SaveDataTable(dt, dt.TableName);
}
public int SaveDataTable(System.Data.DataTable dt, string tableName)
{
return SaveTable(dt, "select * from " + tableName + " where 1 = 2");
}
public int SaveTable(System.Data.DataTable dt, string sql)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
System.Data.Common.DbDataAdapter adapter = CreateAdapter();
adapter.SelectCommand = GetCommand(sql, null);
System.Data.Common.DbCommandBuilder cmdBuild = CreateCommandBuilder();
cmdBuild.DataAdapter = adapter;
cmdBuild.QuotePrefix = "[";
cmdBuild.QuoteSuffix = "]";
return adapter.Update(dt);
}
}
public int SaveDataSet(System.Data.DataSet ds)
{
using (connection)
{
connection.ConnectionString = cnnstr;
connection.Open();
int updates = 0;
foreach (System.Data.DataTable item in ds.Tables)
{
updates += SaveDataTable(item);
}
return updates;
}
}
#endregion
internal virtual System.Data.Common.DbDataAdapter CreateAdapter()
{
throw new System.ApplicationException("DbDataAdapter Can Not Created!");
}
public virtual System.Data.Common.DbCommandBuilder CreateCommandBuilder()
{
throw new System.ApplicationException("DbCommandBuilder Can Not Created!");
}
}
}
DbHelper.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace DynamicFramework
{
public sealed class DbHelper
{
public static List<T> ToList<T>(System.Data.IDataReader reader)
{
List<T> list = new List<T>();
Csla.Data.SafeDataReader sr = new Csla.Data.SafeDataReader(reader);
while (sr.Read())
{
T t = Activator.CreateInstance<T>();
Type entityType = t.GetType();
for (int i = 0; i < sr.FieldCount; i++)
{
string pName = reader.GetName(i);
System.Reflection.PropertyInfo p = entityType.GetProperty(pName);
if (p != null)
{
p.SetValue(t, GetValue(p,sr,i), null);
}
}
list.Add(t);
}
return list;
}
private static object GetValue(System.Reflection.PropertyInfo p,Csla.Data.SafeDataReader sr,int index)
{
if (p.PropertyType == typeof(string))
{
return sr.GetString(index);
}
else if (p.PropertyType == typeof(int))
{
return sr.GetInt32(index);
}
else if (p.PropertyType == typeof(decimal))
{
return sr.GetDecimal(index);
}
else if (p.PropertyType == typeof(DateTime))
{
return sr.GetDateTime(index);
}
else if (p.PropertyType == typeof(bool))
{
return sr.GetBoolean(index);
}
else if (p.PropertyType == typeof(double))
{
return sr.GetDouble(index);
}
else
{
return sr.GetValue(index);
}
}
public static T ToEntity<T>(System.Data.IDataReader reader)
{
Csla.Data.SafeDataReader sr = new Csla.Data.SafeDataReader(reader);
while (sr.Read())
{
T t = Activator.CreateInstance<T>();
Type entityType = t.GetType();
for (int i = 0; i < sr.FieldCount; i++)
{
string pName = reader.GetName(i);
System.Reflection.PropertyInfo p = entityType.GetProperty(pName);
if (p != null)
{
p.SetValue(t, GetValue(p, sr, i), null);
}
}
return t;
}
return default(T);
}
public static List<T> TableToList<T>(System.Data.DataTable dt)
{
return ToList<T>(dt.CreateDataReader());
}
public static System.Data.DataTable ListToTable<T>(IList<T> list)
{
if (list == null) return null;
System.Data.DataTable dt = new System.Data.DataTable(typeof(T).Name);
System.Reflection.PropertyInfo[] props = typeof(T).GetProperties();
if (props.Length >= 0)
{
for (int column = 0; column < props.Length; column++)
{
dt.Columns.Add(props[column].Name, props[column].PropertyType);
}
}
foreach (T item in list)
{
System.Data.DataRow dr = dt.NewRow();
foreach (System.Data.DataColumn column in dt.Columns)
{
dr[column] = item.GetType().GetProperty(column.ColumnName).GetValue(item, null);
}
dt.Rows.Add(dr);
}
//dt.AcceptChanges();
return dt;
}
public static System.Data.DataTable ToTable(System.Data.IDataReader reader)
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Load(reader);
return dt;
}
public static void SaveEntity<T>(T obj)
{
string tb = obj.GetType().Name;
string SQL = "insert into {0}({1})values({2})";
string fles = "";
string sparam = "";
Dictionary<string, object> dicParams = new Dictionary<string, object>();
foreach (System.Reflection.PropertyInfo var in obj.GetType().GetProperties())
{
fles += var.Name + ",";
sparam += "@" + var.Name + ",";
dicParams.Add("@" + var.Name,var.GetValue(obj, null));
}
SQL = string.Format(SQL, tb, fles.Remove(fles.Length - 1), sparam.Remove(sparam.Length - 1));
DataAccess.ServerDb.ExecuteScalar(SQL, dicParams);
}
public static void SaveLocalEntity<T>(T obj)
{
string tb = obj.GetType().Name;
string SQL = "insert into {0}({1})values({2})";
string fles = "";
string sparam = "";
Dictionary<string, object> dicParams = new Dictionary<string, object>();
foreach (System.Reflection.PropertyInfo var in obj.GetType().GetProperties())
{
fles += var.Name + ",";
sparam += "@" + var.Name + ",";
dicParams.Add("@" + var.Name, var.GetValue(obj, null));
}
SQL = string.Format(SQL, tb, fles.Remove(fles.Length - 1), sparam.Remove(sparam.Length - 1));
DataAccess.LocalDb.ExecuteScalar(SQL, dicParams);
}
}
#region DataAsss == OleDb - SqlClient - SQLite
public class OleAccess : DataAccess
{
public OleAccess()
{
connection = new System.Data.OleDb.OleDbConnection();
}
public OleAccess(string connectionString)
{
connection = new System.Data.OleDb.OleDbConnection(connectionString);
cnnstr = connectionString;
}
internal override System.Data.Common.DbDataAdapter CreateAdapter()
{
return new System.Data.OleDb.OleDbDataAdapter();
}
public override System.Data.Common.DbCommandBuilder CreateCommandBuilder()
{
return new System.Data.OleDb.OleDbCommandBuilder();
}
}
public class SqlClientAccess : DataAccess
{
public SqlClientAccess()
{
connection = new System.Data.SqlClient.SqlConnection();
}
public SqlClientAccess(string connectionString)
{
connection = new System.Data.SqlClient.SqlConnection(connectionString);
cnnstr = connectionString;
}
internal override System.Data.Common.DbDataAdapter CreateAdapter()
{
return new System.Data.SqlClient.SqlDataAdapter();
}
public override System.Data.Common.DbCommandBuilder CreateCommandBuilder()
{
return new System.Data.SqlClient.SqlCommandBuilder();
}
}
public class SQLiteAccess : DataAccess
{
public SQLiteAccess()
{
connection = new System.Data.SQLite.SQLiteConnection();
}
public SQLiteAccess(string connectionString)
{
connection = new System.Data.SQLite.SQLiteConnection(connectionString);
cnnstr = connectionString;
}
internal override System.Data.Common.DbDataAdapter CreateAdapter()
{
return new System.Data.SQLite.SQLiteDataAdapter();
}
public override System.Data.Common.DbCommandBuilder CreateCommandBuilder()
{
return new System.Data.SQLite.SQLiteCommandBuilder();
}
}
#endregion
}


猜你喜欢
- 前言大家好,我是空空star,本篇给大家分享一下通过Python的pyttsx3库将文字转为音频。一、pyttsx3是什么?pyttsx3是
- 试了谷歌到的几种方法,都没有解决,然后突然想起在启动apache的时候,iis的端口占用情况(因为我的apache也使用了80端口),所以&
- sys模块提供了与python解释器紧密相关的一些变量和函数。sys部分常用函数函数说明path获取模块文件搜索路径的字符串,或临时指定新搜
- 【历史背景】岁月更迭中我已经从事MySQL-DBA这个工作三个年头,见证MySQL从“基本可用”,“边缘系统可以用MySQL”,“哦操!你怎
- 有些事情始终是需要坚持下去的。。。今天复习一下之前用到的连续相同数据的统计。首先,创建一个简单的测试表,这里过程就略过了,直接上表(真的是以
- 知道如何快速在命令行或者python脚本中实例化一个浏览器通常是非常有用的。每次我需要做任何关于web的自动任务时,我都使用这段python
- <script language="javascript"><!-- var&n
- 本文实例讲述了Python异步操作MySQL。分享给大家供大家参考,具体如下:安装aiomysql依赖Python3.4+asyncioPy
- 摘要:本文主要是在pandas中如何对字符串进行切分。我们考虑一下下面的应用场景。这个是我们的数据集(data),可以看到,数据集中某一列(
- 话说这能难倒我吗?赶赶单单~来 ,开搞!一、准备工作用到的软件准备一哈Python 3.8Pycharm 2021.2知识点Python基础
- JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON
- 本文,我们将回到之前写的showMovieHandler方法,并更新它以返回一个JSON响应,表示系统中的单个电影信息。类似于:{? ? &
- 我的电脑本来是有手动CMake+make安装的OpenCV3的,以及系统自带的python2.x,但是现在想用python3+OpenCV3
- 序言哈喽兄弟们,今天咱们来了解一下 fileinput 。说到fileinput,可能90%的码农表示没用过,甚至没有听说过。这不奇怪,因为
- 对于DataFrame的修改操作其实有很多,不单单是某个部分的值的修改,还有一些索引的修改、列名的修改,类型修改等等。我们仅选取部分进行介绍
- 通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,
- 一、给定一个日期值,求出此日期所在星期的星期一和星期天的日期数据 例如给定一个日期 2010-09-01,求出它所在星期的星期一是2010-
- 前言2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,
- APSchedulerAPScheduler 四个组件分别为:调度器(scheduler)、触发器(trigger),作业存储(job st
- 安装报错类型,解决方案;1. 数据库连接报错mysqldb只支持python2,pymysql支持3,都是使用c写的驱动,性能更好# dja