数据库接口基础类 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创建语句 ...
随机推荐
- 删除Win10菜单中的幽灵菜单(ms-resource:AppName/Text )
新建一个 .bat文件,输入以下内容 @echo off taskkill /f /im explorer.exe taskkill /f /im shellexperiencehost.exe ti ...
- GitHook 工具 —— husky介绍及使用
名称 githooks-Git使用的挂钩.(githook在官网的介绍) 描述 如同其他许多的版本控制系统一样,Git 也具有在特定事件发生之前或之后执行特定脚本代码功能(从概念上类比,就与监听事件. ...
- phpcms抛出的二维数组转移到js,js中for....in遍历数组,用“.”连接来读出一维数组值
直切正题: 1.phpcms在模版中读出数组有很多中方法,如,{pc:content action="lists"}或{pc:get sql=""},经过{lo ...
- HashMap初始化容量过程
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生.在日常开发中,我们经常会像如下方式以下创建一个HashMap: Map&l ...
- 170.分组-group、permission、user的操作
分组 1.Group.objects.create(group_name):创建分组. 2.group.permissions:某个分组上的权限.多对多关系. (1)group.permissions ...
- JS实现轮播图特效(带二级导航)
按照国际惯例先放效果图 index.html <!DOCTYPE html> <html lang="en"> <head> <meta ...
- JS基础-语法+流程控制语句+函数+内置对象【数组】
JS语法: Javascript基本数据类型:undefined/null/Boolean/number/string 复杂数据类型:object typeof用来检测变量的数据类型 typeof的使 ...
- Nginx模块之ngx_http_proxy_module
ngx_http_proxy_module模块: 示例: location / { proxy_pass http://localhost:8000; proxy_set_header Host $h ...
- java中equals与==号的区别
1.==号对于基本数据类型来说,比较的是值,对于引用数据类型来说比较的是地址值 2.equals方法在object类中,比较的是地址值,但是String类重写了Object类中的equals方法,所以 ...
- PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答,每两日一 ...