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; } } } }