多类型数据库公共操作-对应数据库操作实例类

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;

using Microsoft.Practices.EnterpriseLibrary.Data;
using EFWCoreLib.CoreFrame.EntLib;

namespace EFWCoreLib.CoreFrame.DbProvider
{
/// <summary>
/// EntLibDb
/// </summary>
public class EntLibDb : AbstractDatabase
{

public EntLibDb()
: base()
{
database = ZhyContainer.CreateDataBase();
_connString = database.ConnectionString;

switch (database.GetType().Name)
{
case "SqlDatabase":
DbType = DatabaseType.SqlServer2005;
break;
case "OracleDatabase":
DbType = DatabaseType.Oracle;
break;
default:
DbType = DatabaseType.UnKnown;
break;
}
}

public EntLibDb(string key)
: base()
{

database = ZhyContainer.CreateDataBase(key);
_connString = database.ConnectionString;

switch (database.GetType().Name)
{
case "SqlDatabase":
DbType = DatabaseType.SqlServer2005;
break;
case "OracleDatabase":
DbType = DatabaseType.Oracle;
break;
default:
DbType = DatabaseType.UnKnown;
break;
}
}

public override void TestDbConnection()
{
database.CreateConnection().Open();
}

public override void BeginTransaction()
{
try
{
if (isInTransaction == false)
{
connection = database.CreateConnection();
connection.Open();
transaction = connection.BeginTransaction();
isInTransaction = true;
}
else
{
throw new Exception("事务正在进行,一个对象不能同时开启多个事务!");
}
}
catch (Exception e)
{
connection.Close();
isInTransaction = false;
throw new Exception("事务启动失败,请再试一次!\n" + e.Message);
}
}
public override void CommitTransaction()
{
if (transaction != null)
{
transaction.Commit();
isInTransaction = false;
connection.Close();
}
else

throw new Exception("无可用事务!");
}
public override void RollbackTransaction()
{
if (transaction != null)
{
transaction.Rollback();
isInTransaction = false;
connection.Close();
}
else
throw new Exception("无可用事务!");
}

public override int InsertRecord(string commandtext)
{
switch (DbType)
{
case DatabaseType.Oracle:
//string strsql = "SELECT Test_SQL.nextval FROM dual";SELECT @@IDENTITY
if (isInTransaction)
{
command = database.GetSqlStringCommand(commandtext);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
//command.CommandText = command.CommandText + ";SELECT @@IDENTITY";
return Convert.ToInt32(database.ExecuteScalar(command, transaction));
}
else
{
command = database.GetSqlStringCommand(commandtext);
//command.CommandText = command.CommandText + ";SELECT @@IDENTITY";
return Convert.ToInt32(database.ExecuteScalar(command));
}
case DatabaseType.SqlServer2005:
case DatabaseType.SqlServer2000:
if (isInTransaction)
{
command = database.GetSqlStringCommand(commandtext);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
command.CommandText = command.CommandText + ";SELECT @@IDENTITY";
return Convert.ToInt32(database.ExecuteScalar(command, transaction));
}
else
{
command = database.GetSqlStringCommand(commandtext);
command.CommandText = command.CommandText + ";SELECT @@IDENTITY";
return Convert.ToInt32(database.ExecuteScalar(command));
}
case DatabaseType.IbmDb2:
throw new Exception("未实现IbmDb2的数据库操作!");
break;
case DatabaseType.MySQL:
throw new Exception("未实现MySQL的数据库操作!");
break;
default:
throw new Exception("未实现的数据库操作!");
break;
}
}

public override DataTable GetDataTable(string commandtext)
{
DataSet ds = null;

if (isInTransaction)
{
command = new SqlCommand(commandtext);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;

ds = database.ExecuteDataSet(command, transaction);
}
else
{
ds = database.ExecuteDataSet(CommandType.Text, commandtext);
}

if (ds != null && ds.Tables.Count > 0)
{
return ds.Tables[0];
}
throw new Exception("没有数据");
}

public override DataTable GetDataTable(string storeProcedureName, params object[] parameters)
{
DataSet ds = null;
if (isInTransaction)
{
command = database.GetStoredProcCommand(storeProcedureName, parameters);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;

ds = database.ExecuteDataSet(command, transaction);
}
else
{
ds = database.ExecuteDataSet(storeProcedureName, parameters);
}

if (ds != null && ds.Tables.Count > 0)
{
return ds.Tables[0];
}
throw new Exception("没有数据");
}

public override IDataReader GetDataReader(string commandtext)
{
if (isInTransaction)
{
command = database.GetSqlStringCommand(commandtext);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
return database.ExecuteReader(command, transaction);
}
else
{
return database.ExecuteReader(CommandType.Text, commandtext);
}
}

public override int DoCommand(string commandtext)
{
if (isInTransaction)
{
command = database.GetSqlStringCommand(commandtext);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
return database.ExecuteNonQuery(command, transaction);
}
else
{
return database.ExecuteNonQuery(CommandType.Text, commandtext);
}
}
public override int DoCommand(string storeProcedureName, params object[] parameters)
{
if (isInTransaction)
{
command = database.GetStoredProcCommand(storeProcedureName, parameters);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
return database.ExecuteNonQuery(command, transaction);
}
else
{
return database.ExecuteNonQuery(storeProcedureName, parameters);
}
}

public override object GetDataResult(string commandtext)
{
if (isInTransaction)
{
command = database.GetSqlStringCommand(commandtext);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
return database.ExecuteScalar(command, transaction);
}
else
{
return database.ExecuteScalar(CommandType.Text, commandtext);
}
}
public override object GetDataResult(string storeProcedureName, params object[] parameters)
{
if (isInTransaction)
{
command = database.GetStoredProcCommand(storeProcedureName, parameters);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;
return database.ExecuteScalar(command, transaction);
}
else
{
return database.ExecuteScalar(storeProcedureName, parameters);
}
}

public override DataSet GetDataSet(string storeProcedureName, params object[] parameters)
{
DataSet ds = null;

if (isInTransaction)
{
command = database.GetStoredProcCommand(storeProcedureName, parameters);
command.Connection = connection;
command.Transaction = transaction;
command.CommandType = CommandType.Text;

ds = database.ExecuteDataSet(command, transaction);
}
else
{
ds = database.ExecuteDataSet(storeProcedureName, parameters);
}

if (ds != null && ds.Tables.Count > 0)
{
return ds;
}
throw new Exception("没有数据");
}

}
}

时间: 2024-10-13 20:25:12

多类型数据库公共操作-对应数据库操作实例类的相关文章

Python MySQLdb模块连接操作mysql数据库实例_python

mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql-python.sourceforge.net/有下载和文档. 由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使用哪种数据库的方法都大同小异的,这里就给出一段示范的代码: #-*- encoding: gb2312 -*- import os, sys, string impo

实例讲解如何使用C++操作MySQL数据库类

用C++操作MySQL数据库类: 注释:这几个类对处理不是很大数据量的操作是很理想的, 但不适宜特大型的数据的查询,因为源码中将查询到的数据直接放入了内存. /* *  project: *           通用模块 ( 用 c++ 处理  mysql 数据库类,像ADO ) *                  *  description: * *           通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作 *    包括连接.

创建WRAPPER时, SQL20076N 未对指定的操作启用数据库的实例。

您可以通过运行DB2 UPDATE DBM CFG USING FEDERATED YES来设置这个参数.修改这个参数后,必须重新启动实例才会生效(DB2STOP/DB2START).所以你会出现你的 那个错误: 未启动实例 本文说明的是在同一个数据库实例中,在源数据库dbsrc中访问目标库dbtarget的表table1的方法 用户名:usr,密码:pwd db2 版本: UDB FOR AIX 8.2.2 OS: Microsoft Windows XP Professional versi

java操作redis数据库实例(redis集群)

1.配置redis集群 <?xml version="1.0" encoding="UTF-8"?> <redisCluster> <!--userRoute --> <clusterGroup name="userRoute" selectdb="1"> <server host="10.177.129.16" port="6379"

C#连接操作 MySQL 数据库实例(使用官方驱动)

MySQL 以其免费和足够的性能受到很大的青睐,当然对于国内小公司,甚至是大公司如果对版权看得薄,敢冒险的话,随便装个 SqlServer.DB2.Oracle 都行.对于 SqlServer 数据库,因其与 MS 是一家,自然在 .net 类库中有内建支持,假如 MySQL 就得找第三方的驱动了 - .net 中多讲 Provider.在这里我也是作为一个预研专题,记录下 C# 连接 MySQL 的两种方法,分别使用 MySQL 官方的和 SourceForge 上一个开源的 MySQL 驱动

python 之操作mysql 数据库实例

对于python操作mysql 数据库,具体的步骤应为: 1. 连接上mysql host 端口号 数据库 账号 密码2. 建立游标3. 执行sql(注意,如果是update,insert,delete 需要进行提交才能生效.)4. 获取结果5. 关闭连接.关闭游标 一.默认获取的结果是元祖 1 conn = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='sakila',charset='ut

shell脚本连接、读写、操作mysql数据库实例

本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为xml或html文件, 并分析了核心语句.本文介绍的方法适用于PostgreSQL ,相对mysql而言,shell 中读写PostgreSQL会更简单些. 1. 连接mysql 数据库 shell中连接数据库的方法很简单,只需要指定用户名,密码,连接的数据库名称,然后通过重定向,输入mysql的语

根据实例类型反射操作数据库(简单通用表操作类)

这个类适用简单的表 1.有且只有id为主键, 2.并且实例类主键,也就是id应为字段,其他为属性 3.实例类名跟表名一样,字段属性跟列名一样 public class ProType { public int id; public string type { get; set; } public int array { get; set; } public string relyTpye { get; set; } public string etype { get; set; } } 下面就是

dos命令行连接操作ORACLE数据库

C:\Adminstrator> sqlplus "/as sysdba" 查看是否连接到数据库 SQL> select status from v$instance; v$动态表开头,查看动态实例,open为启动. SQL> shutdown immediate关闭数据库 SQL> startup 继续启动 SQL> show parameter db_name 查看数据库名称 查询数据库SCOTT用户默认的状态 SQL> select usern

python操作mysql数据库实现增删改查

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支持数据库列表. 不同的数据库你需要下载不同的DB API模块,例如你需要