数据库接口基础类 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创建语句 ...
随机推荐
- ConcurrentHashMap的size()方法(1.7和1.8)
在1.7和1.8版本中,计算size()方法有写不同.先介绍1.7版本的实现. 1.7版本 在1.7版本中,有一个重要的类Segment,利用它来实现分段锁 static final class Se ...
- day 15 内置函数
内置函数 不用def定义能直接用的函数,带括号的 locals() # 返回本地作用域中的所有名字 globals() # 返回全局作用域中的所有名字 global 变量 nonlocal 变量 迭代 ...
- 【python基础语法】第2天作业练习题
""" 1.用户输入一个数值,请判断用户输入的是否为偶数?是偶数输出True,不是输出False(提示:input输入的不管是什么,都会被转换成字符串,自己扩展,想办法将 ...
- 字节跳动挤上少儿英语末班车,gogokid能否抵达终点?
编辑 | 于斌 出品 | 于见(mpyujian) 近日,据多方消息,字节跳动旗下少儿英语品牌gogokid,迎来了一位新的90后CEO金钱琛.据知情人士透露,金钱琛入职不到两个月,目前全面掌管gog ...
- object解构赋值
let options = { title: 'menu', width: 100, height: 200 } //如果简写,变量名必须和属性名一致 let {title,width,height} ...
- 封装的Redis队列
封装的Redis队列 MyRedisQueue.py #!usr/bin/env python2.7 # -*- coding: utf-8 -*- import redis class RedisQ ...
- JSP页面取不到ModelAndView里面存的值
方法1:在jsp页面上加上<%@ page isELIgnored="false" %>
- Spring Event事件驱动
Spring事件驱动模型,简单来说类似于Message-Queue消息队列中的Pub/Sub发布/订阅模式,也类似于Java设计模式中的观察者模式. 自定义事件 Spring的事件接口位于org.sp ...
- wxpython学习:创建最小的空的wxPython程序
frame = wx.Frame(parent=None, title=’Bare’) frame.Show() return True app = App() app.MainLoop() 上面的代 ...
- 安装Kibana到Linux(源码)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Kibana-7.1.0 硬件要求:最低2核4GB 安装过程 1.源码安装JDK 1.1.从官网 ...