1.为数据库读取基类

 public class DBBase : IDisposable
{
public virtual void Dispose()
{
throw new NotImplementedException();
} public virtual int ExecuteSQL(string sql)
{
return ;
} public virtual DataTable DBGetDataTable(string sql)
{
return null;
}
/// </summary>
/// <param name="item"></param>
/// <param name="keyname"></param>
/// <param name="keyid"></param>
/// <returns></returns>
public int ExecuteSQL_Update(object item, string key, string keyvalue)
{
if (item == null)
return -;
var type = item.GetType();
var tablename = type.Name;
var atts = type.GetProperties();
string valueset = "";
foreach (var a in atts)
{
var aname = a.Name;
var value = a.GetValue(item);
valueset += aname + "=" + GetValue2String(value) + ",";
}
valueset = valueset.Trim(','); var sql = "UPDATE " + tablename + " set " + valueset + " where " + key + "= '" + keyvalue + "'";
return ExecuteSQL(sql);
} public int ExecuteSQL_Insert(object item)
{
if (item == null)
return -;
var type = item.GetType();
var tablename = type.Name;
var atts = type.GetProperties();
var keys = "";
var values = "";
foreach (var a in atts)
{
var aname = a.Name;           //插入中对对象的处理
                var attdescs = a.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
if (attdescs.Count() != )
{
var att = attdescs[] as System.ComponentModel.DescriptionAttribute;
if (att != null)
{
if (att.Description == "Serialize")
{
var vale = a.GetValue(item,null);
DataContractJsonSerializer ser = new DataContractJsonSerializer(vale.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, vale);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
keys += aname + ",";
values += GetValue2String(jsonString) + ",";
continue;
}
if (att.Description == "Ignore")
{
continue;
}
}
}

var value = a.GetValue(item);
keys += aname + ",";
values += GetValue2String(value) + ",";
} keys = keys.Trim(',');
values = values.Trim(','); var sql = "INSERT INTO " + tablename + " ( " + keys + " ) VALUES ( " + values + " )";
return ExecuteSQL(sql);
} /// <summary>
/// 获取对象列表
/// </summary>
/// <typeparam name="T">表所对应的对象名称</typeparam>
/// <param name="sql">查询语句</param>
/// <returns>返回获取到的对象实例列表</returns>
public List<T> QueryObjectList<T>(string sql) where T : new()
{
var table = DBGetDataTable(sql);
return ConvertTableToObject<T>(table);
} public List<T> ConvertTableToObject<T>(DataTable t) where T : new()
{
if (t == null)
return null;
List<T> list = new List<T>();
foreach (DataRow row in t.Rows)
{
T obj = new T();
GetObject(t.Columns, row, obj);
if (obj != null && obj is T)
list.Add(obj);
}
return list;
} public T ConvertToObject<T>(DataRow row) where T : new()
{
object obj = new T();
if (row != null)
{
DataTable t = row.Table;
GetObject(t.Columns, row, obj);
}
if (obj != null && obj is T)
return (T)obj;
else
return default(T);
} /// <summary>
/// 获取第一条数据中的某个值
/// </summary>
/// <param name="sql"></param>
/// <param name="key"></param>
/// <returns></returns>
public string QueryString(string sql, string key)
{
var table = DBGetDataTable(sql);
if (table != null)
{
if (table.Rows.Count >= )
{
var row = table.Rows[];
if (row != null)
{
return GetValue2String(row[key]);
}
}
}
return null;
} protected void GetObject(DataColumnCollection cols, DataRow dr, Object obj)
{
Type t = obj.GetType();
var props = t.GetProperties();
foreach (var pro in props)
{
if (cols.Contains(pro.Name))
{
if (dr[pro.Name] != DBNull.Value)
{
try
{
switch (pro.PropertyType.Name)
{
case "Int32":
{
Int32 value = Convert.ToInt32(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break; case "System.Nullable`1[System.Int32]":
{
Int32 value = Convert.ToInt32(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break;
case "Nullable`1"://数据库可为空的字段处理
{
var name = pro.ToString();
if (name.Contains("System.Nullable`1[System.Int32]"))
{
var intvalue = dr[pro.Name];
if (intvalue != null)
{
Int32 value = Convert.ToInt32(intvalue);
pro.SetValue(obj, value, null);
}
}
else if (name.Contains("System.Nullable`1[System.DateTime]"))
{
var intvalue = dr[pro.Name];
if (intvalue != null)
{
var value = Convert.ToDateTime(intvalue);
pro.SetValue(obj, value, null);
}
}
}
break;
case "Double":
{
double value = Convert.ToDouble(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break;
case "Single":
{
float value = Convert.ToSingle(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break;
case "Int64":
{
Int64 value = Convert.ToInt64(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break;
case "Int16":
{
Int16 value = Convert.ToInt16(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break;
case "Decimal":
{
Decimal value = Convert.ToDecimal(dr[pro.Name]);
pro.SetValue(obj, value, null);
}
break;
case "String":
{
try
{
var oldt = dr[pro.Name].GetType();
if (oldt.Name !="String")//这里处理类型不对应的情况,默认model类型是string的时候判断,不对应就转成string,便于model定义
{
pro.SetValue(obj, dr[pro.Name].ToString(), null);
}
else
{
pro.SetValue(obj, dr[pro.Name], null);
}
}
catch
{
pro.SetValue(obj, dr[pro.Name].ToString(), null);
}
}
break;
default:
{
                        
                        //程序对对象的处理,对象上有Description特性,两种情况,序列化或忽略
                       var attdescs = pro.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
if (attdescs.Count() != )
{
var att = attdescs[] as System.ComponentModel.DescriptionAttribute;
if (att != null)
{
if (att.Description == "Serialize")
{
var vale = dr[pro.Name].ToString();
var serializer = new DataContractJsonSerializer(pro.PropertyType);
var ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(vale.ToCharArray()));
var objval = serializer.ReadObject(ms);
ms.Close();
pro.SetValue(obj, objval, null);
continue;
}
if (att.Description == "Ignore")
{
continue;
}
}
} pro.SetValue(obj, dr[pro.Name], null);
                                    }
break;
}
}
catch
{
pro.SetValue(obj, null, null);
}
finally
{
}
}
else
{
pro.SetValue(obj, null, null);
}
}
}
} protected string GetValue2String(Object obj)
{
if (obj == null)
return "null";
Type t = obj.GetType();
try
{
switch (t.Name)
{
case "String":
{
return "'" + obj.ToString() + "'";
}
case "DateTime":
{
return "to_date('" + obj.ToString() + "','YYYY-MM-DD hh24:mi:ss')";//默认获取到的日期格式,可以根据具体需求改
}
default:
{
return obj.ToString();
}
}
}
catch
{
return "";
}
}
}

2.oracle 派生

    public class DBSupport : DBBase
{
//public static string conncet = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); string conn;
public DBSupport(string connect)
{
conn = connect;
if (mQracleConnecting == null)
mQracleConnecting = new OracleConnection(connect);
if (mQracleConnecting.State != ConnectionState.Open)
mQracleConnecting.Open();
} #region DB
OracleConnection mQracleConnecting = null;
public OracleConnection QracleConnecting
{
get
{
return mQracleConnecting;
}
} public override DataTable DBGetDataTable(string sql)
{
try
{
DataTable dataSet = new DataTable();
OracleDataAdapter OraDA = new OracleDataAdapter(sql, mQracleConnecting);
OraDA.Fill(dataSet);
return dataSet;
}
catch (Exception)
{
FileSupport.Instance.Write("数据库连接异常" + conn);
return null;
} } // 执行SQL语句,返回所影响的行数
public override int ExecuteSQL(string sql)
{
int Cmd = ;
OracleCommand command = new OracleCommand(sql, QracleConnecting);
try
{
Cmd = command.ExecuteNonQuery();
}
catch(Exception ex)
{
FileSupport.Instance.Write(ex.ToString());
}
return Cmd;
} #endregion public DataSet ReturnDataSet(string sql, string DataSetName)
{
DataSet dataSet = new DataSet();
OracleDataAdapter OraDA = new OracleDataAdapter(sql, QracleConnecting);
OraDA.Fill(dataSet, DataSetName);
return dataSet;
} public override void Dispose()
{
if(mQracleConnecting.State == ConnectionState.Open)
mQracleConnecting.Close();
}
}

3.sql server 派生

  public  class SQLDBSupport : DBBase
{
string conn;
public SQLDBSupport(string connect)
{
if (mConnecting == null)
{
conn = connect;
mConnecting = new SqlConnection(connect);
mConnecting.Open();
}
} #region DB
SqlConnection mConnecting = null;
public SqlConnection Connecting
{
get
{
return mConnecting;
}
} public override DataTable DBGetDataTable(string sql)
{
try
{
SqlDataAdapter myda = new SqlDataAdapter(sql, Connecting); // 实例化适配器
DataTable dt = new DataTable(); // 实例化数据表
myda.Fill(dt); // 保存数据
return dt;
}
catch (Exception ex)
{
FileSupport.Instance.Write(ex.ToString());
return null;
} } // 执行SQL语句,返回所影响的行数
public override int ExecuteSQL(string sql)
{
int Cmd = ;
var Command= Connecting.CreateCommand();
try
{
Cmd = Command.ExecuteNonQuery();
}
catch (Exception ex)
{
FileSupport.Instance.Write(ex.ToString());
}
return Cmd;
} #endregion
public override void Dispose()
{
if (Connecting.State == ConnectionState.Open)
Connecting.Close();
}
}

数据库接口基础类 oracle,sql server的更多相关文章

  1. 介绍几种大型的Oracle/SQL Server数据库免费版

    我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...

  2. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  3. mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号

    mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...

  4. 触发器实现对插入数据的字段更改 Oracle+SQL Server

    最近有个使用触发器实现对插入数据的某个列做更改的需求,因此整理了Oracle和SQL Server对于此类需求的触发器写法,本文仅提到了Insert触发器. 首先我们创建一张表: --创建Test表 ...

  5. 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)

    1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...

  6. 转:不在同一个服务器上的数据库之间的数据操作(oracle/sql server的对比)

    如何操做不在同一个数据库中的数据操作: 一.对于SQL server来讲:  1.采用创建链接服务器的方式:    (1).创建链接服务器       exec sp_addlinkedserver  ...

  7. mysql,oracle,sql server中的默认事务隔离级别查看,更改

    未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL m ...

  8. Oracle & SQL Server 数据传输

    在开发中用到的Oracle与SQL Server间数据传输的不同方法的整理,比较.包括原理的简介,配置和实现方法,优缺点的比较,使用平台和DB,适合的应用范围和效能的比较. 整理的方法有如下六种: 1 ...

  9. Perl/C#连接Oracle/SQL Server和简单操作

    连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...

随机推荐

  1. 【Git】git使用 - rebase的使用

    官方参考指南: Pro Git Book v2, § rebasing. English Pro Git Book v2, § rebase:衍合. 中文版 (建议还是看一下英文原版,就当熟练英语.) ...

  2. Upx 压缩go编译的程序 frp

    1. frp 程序占用大 .路由器 不够空间 2. UPX 下载地址       https://github.com/upx/upx/releases/ 3.  压缩命令  upx.exe -9 C ...

  3. 第2章.数组和ArrayList

    2.1 数组基本概念 数组是可索引的数据的集合.数组既可以是内置的类型,也可以是用户自定义的类型.事实上,把数组数据称为对象大概是最简便的方式.C#中数组实际上就是对象的本身,因为它们都源于Syste ...

  4. 网络流最大流——dinic算法

    前言 网络流问题是一个很深奥的问题,对应也有许多很优秀的算法.但是本文只会讲述dinic算法 最近写了好多网络流的题目,想想看还是写一篇来总结一下网络流和dinic算法以免以后自己忘了... 网络流问 ...

  5. Windows配置JDK环境

    在系统变量里新建JAVA_HOME变量,变量值为:D:\Program Files\Java\jdk1.8.0_161(根据自己的安装路径填写) 在系统变量里新建classpath变量,变量值为:;% ...

  6. Python_2_daythree2_CyclicStructure

    """Function_1: for-in循环用for循环实现1~100之间的奇数求和 Time: 2020.1.27Author: YaoXie"" ...

  7. Redis入门-01

    目录 使用场景 支持的数据类型 主从复制 原理 配置 哨兵机制 持久化 RDB(Redis Database) AOF(Append Only File) redis(Remote DIctionar ...

  8. 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型

    // org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...

  9. 剑指offer-基础练习-增删节点-链表

    /* 链表基本操作: 插入节点和删除节点 */ /* 思路: 使用指向链表的头指针,这样在新插入节点后,头指针不会改变 */ struct ListNode{ int value; ListNode* ...

  10. 安装AB到CentOS(YUM)

    运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:httpd-tools-2.4.6 硬件要求:无 安装过程 1.安装YUM-EPEL源 HTTP ...