数据库接口基础类 oracle,sql server
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的更多相关文章
- 介绍几种大型的Oracle/SQL Server数据库免费版
我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...
- Oracle,SQL Server 数据库较MySql数据库,Sql语句差异
原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...
- mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号
mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...
- 触发器实现对插入数据的字段更改 Oracle+SQL Server
最近有个使用触发器实现对插入数据的某个列做更改的需求,因此整理了Oracle和SQL Server对于此类需求的触发器写法,本文仅提到了Insert触发器. 首先我们创建一张表: --创建Test表 ...
- 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)
1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...
- 转:不在同一个服务器上的数据库之间的数据操作(oracle/sql server的对比)
如何操做不在同一个数据库中的数据操作: 一.对于SQL server来讲: 1.采用创建链接服务器的方式: (1).创建链接服务器 exec sp_addlinkedserver ...
- mysql,oracle,sql server中的默认事务隔离级别查看,更改
未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL m ...
- Oracle & SQL Server 数据传输
在开发中用到的Oracle与SQL Server间数据传输的不同方法的整理,比较.包括原理的简介,配置和实现方法,优缺点的比较,使用平台和DB,适合的应用范围和效能的比较. 整理的方法有如下六种: 1 ...
- Perl/C#连接Oracle/SQL Server和简单操作
连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...
随机推荐
- 【Git】git使用 - rebase的使用
官方参考指南: Pro Git Book v2, § rebasing. English Pro Git Book v2, § rebase:衍合. 中文版 (建议还是看一下英文原版,就当熟练英语.) ...
- Upx 压缩go编译的程序 frp
1. frp 程序占用大 .路由器 不够空间 2. UPX 下载地址 https://github.com/upx/upx/releases/ 3. 压缩命令 upx.exe -9 C ...
- 第2章.数组和ArrayList
2.1 数组基本概念 数组是可索引的数据的集合.数组既可以是内置的类型,也可以是用户自定义的类型.事实上,把数组数据称为对象大概是最简便的方式.C#中数组实际上就是对象的本身,因为它们都源于Syste ...
- 网络流最大流——dinic算法
前言 网络流问题是一个很深奥的问题,对应也有许多很优秀的算法.但是本文只会讲述dinic算法 最近写了好多网络流的题目,想想看还是写一篇来总结一下网络流和dinic算法以免以后自己忘了... 网络流问 ...
- Windows配置JDK环境
在系统变量里新建JAVA_HOME变量,变量值为:D:\Program Files\Java\jdk1.8.0_161(根据自己的安装路径填写) 在系统变量里新建classpath变量,变量值为:;% ...
- Python_2_daythree2_CyclicStructure
"""Function_1: for-in循环用for循环实现1~100之间的奇数求和 Time: 2020.1.27Author: YaoXie"" ...
- Redis入门-01
目录 使用场景 支持的数据类型 主从复制 原理 配置 哨兵机制 持久化 RDB(Redis Database) AOF(Append Only File) redis(Remote DIctionar ...
- 【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型
// org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便 ...
- 剑指offer-基础练习-增删节点-链表
/* 链表基本操作: 插入节点和删除节点 */ /* 思路: 使用指向链表的头指针,这样在新插入节点后,头指针不会改变 */ struct ListNode{ int value; ListNode* ...
- 安装AB到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:httpd-tools-2.4.6 硬件要求:无 安装过程 1.安装YUM-EPEL源 HTTP ...