using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using CnasSynchronousCommon;
using Kdbndp; // 人大金仓数据库驱动
namespace CnasSynchronusDAL
{
public static class KingbaseHelper
{
private static String mConnStr = null;
public static void InitConnectionString(string strServerIP, string strServerPort, string strServerHost, string strServerUser, string strServerPwd)
{
// 使用KdbndpConnectionStringBuilder构建连接字符串
var builder = new KdbndpConnectionStringBuilder
{
Host = strServerIP,
Port = Convert.ToInt32(strServerPort),
Database = strServerHost,
Username = strServerUser,
Password = strServerPwd
};
mConnStr = builder.ToString();
}
public static void InitConnectionString(string strConnectiong)
{
mConnStr = strConnectiong;
}
///
/// 对Kingbase数据库执行增删改操作,返回受影响的行数。
///
/// 要执行的增删改的SQL语句
///
public static int ExecuteNonQuery(String sql)
{
using (var connection = new KdbndpConnection(mConnStr))
{
try
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
using (var cmd = new KdbndpCommand(sql, connection, transaction))
{
int rows = cmd.ExecuteNonQuery();
transaction.Commit();
return rows;
}
}
catch (Exception e1)
{
transaction.Rollback();
AppLog.Error(e1.Message);
throw;
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
}
///
/// 对数据库执行增删改操作,返回受影响的行数。
///
/// 要执行的增删改的SQL语句
///
public static int ExecuteNonQuery(String sql, KdbndpParameter[] cmdParams)
{
using (var connection = new KdbndpConnection(mConnStr))
{
try
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
using (var cmd = new KdbndpCommand(sql, connection, transaction))
{
if (cmdParams != null)
{
cmd.Parameters.AddRange(cmdParams);
}
int rows = cmd.ExecuteNonQuery();
transaction.Commit();
return rows;
}
}
catch (Exception e1)
{
transaction.Rollback();
AppLog.Error(e1.Message);
throw;
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
}
///
/// 对Kingbase数据库执行操作,返回 返回第一行第一列数据
///
///
///
public static int ExecuteScalar(String sql)
{
try
{
using (KdbndpConnection connection = new KdbndpConnection(mConnStr))
{
connection.Open();
KdbndpTransaction transaction = connection.BeginTransaction();
using (KdbndpCommand cmd = new KdbndpCommand())
{
try
{
int line = 0;
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
String str = cmd.ExecuteScalar().ToString();
transaction.Commit();
line = Convert.ToInt32(str);
cmd.Parameters.Clear();
return line;
}
catch (KdbndpException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
AppLog.Error(e2.Message);
throw;
}
AppLog.Error(e1.Message);
throw;
}
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
///
/// 对Kingbase数据库执行操作,返回 返回第一行第一列数据
///
///
///
public static int ExecuteScalar(String sql, KdbndpParameter[] cmdParams)
{
try
{
using (KdbndpConnection connection = new KdbndpConnection(mConnStr))
{
connection.Open();
KdbndpTransaction transaction = connection.BeginTransaction();
using (KdbndpCommand cmd = new KdbndpCommand())
{
try
{
int line = 0;
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
String str = cmd.ExecuteScalar().ToString();
transaction.Commit();
line = Convert.ToInt32(str);
cmd.Parameters.Clear();
return line;
}
catch (KdbndpException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
AppLog.Error(e2.Message);
throw;
}
AppLog.Error(e1.Message);
throw;
}
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
///
/// 用执行的数据库连接执行一个返回数据集的sql命令
///
///
///
public static KdbndpDataReader ExecuteReader(String sql)
{
try
{
//创建一个KdbndpConnection对象
using (KdbndpConnection connection = new KdbndpConnection(mConnStr))
{
connection.Open();
KdbndpTransaction transaction = connection.BeginTransaction();
//创建一个KdbndpCommand对象
using (KdbndpCommand cmd = new KdbndpCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
KdbndpDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
transaction.Commit();
cmd.Parameters.Clear();
return reader;
}
catch (KdbndpException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
AppLog.Error(e2.Message);
throw;
}
AppLog.Error(e1.Message);
throw;
}
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
///
/// 查询返回Dtaset
///
///
///
public static DataSet ExecuteDataSet(String sql)
{
using (var connection = new KdbndpConnection(mConnStr))
{
try
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
using (var cmd = new KdbndpCommand(sql, connection, transaction))
{
var adapter = new KdbndpDataAdapter(cmd);
var ds = new DataSet();
adapter.Fill(ds);
transaction.Commit();
return ds;
}
}
catch (Exception e1)
{
transaction.Rollback();
AppLog.Error(e1.Message);
throw;
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
}
///
/// 执行sql 返回一个DataTable
///
///
///
///
public static DataTable ExecuteDataTable(string sqlText, params KdbndpParameter[] parameters)
{
using (var connection = new KdbndpConnection(mConnStr))
{
try
{
using (var adapter = new KdbndpDataAdapter(sqlText, connection))
{
if (parameters != null)
{
adapter.SelectCommand.Parameters.AddRange(parameters);
}
var dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
catch (Exception ex)
{
AppLog.Error(ex.Message);
return null;
}
}
}
///
/// 查询返回Dtaset
///
///
///
public static DataSet ExecuteDataSet(String sql, KdbndpParameter[] cmdParams)
{
KdbndpConnection connection = new KdbndpConnection(mConnStr);
try
{
//创建一个KdbndpConnection对象
using (connection)
{
connection.Open();
KdbndpTransaction transaction = connection.BeginTransaction();
//创建一个KdbndpCommand对象
using (KdbndpCommand cmd = new KdbndpCommand())
{
try
{
PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
KdbndpDataAdapter adapter = new KdbndpDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
transaction.Commit();
//清除参数
cmd.Parameters.Clear();
return ds;
}
catch (KdbndpException e1)
{
try
{
transaction.Rollback();
}
catch (Exception e2)
{
AppLog.Error(e2.Message);
throw;
}
AppLog.Error(e1.Message);
throw;
}
}
}
}
catch (Exception e)
{
AppLog.Error(e.Message);
throw;
}
}
///
/// 准备执行一个命令
///
/// sql命令
/// OleDb连接
/// OleDb事务
/// 命令类型例如 存储过程或者文本
/// 命令文本,例如:Select * from Products
/// 执行命令的参数
private static void PrepareCommand(KdbndpCommand cmd, KdbndpConnection conn, KdbndpTransaction trans, CommandType cmdType, string cmdText, KdbndpParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (KdbndpParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
public static bool TestConnectKingbase()
{
try
{
// 完整参数示例
//string connStr = "Host=localhost;Port=54321;Database=test;Username=system;Password=1;Pooling=true;MinPoolSize=1;MaxPoolSize=20;CommandTimeout=120;";
string connStr = "Host=localhost;Port=54321;Database=testdb;Username=SYSTEM;Password=1;";
//using (var connection = new KdbndpConnection(mConnStr))
using (var connection = new KdbndpConnection())
{
connection.ConnectionString = connStr;
connection.Open();
return connection.State == ConnectionState.Open;
}
}
catch (Exception ex)
{
AppLog.Error(ex.Message);
return false;
}
}
}
}