using System; using System.Collections.Generic; using System.Linq; using System.Text; using Npgsql; using System.Data; namespace Aitex.Core.RT.DBCore { public class PostgresqlHelper { /// /// 连接字符串需要初始化 /// public static string ConnectionString { get; set; } /// /// 获得连接对象 /// /// public static NpgsqlConnection GetConnection() { if (string.IsNullOrWhiteSpace(ConnectionString)) throw new ArgumentNullException("PostgresqlConn"); return new NpgsqlConnection(ConnectionString); } static void PrepareCommand(NpgsqlCommand cmd, NpgsqlConnection conn, string cmdText, params object[] p) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Parameters.Clear(); cmd.Connection = conn; cmd.CommandText = cmdText; cmd.CommandType = CommandType.Text; if (p != null) { foreach (object parm in p) cmd.Parameters.AddWithValue(string.Empty, parm); } } public static DataSet ExecuteDataset(string cmdText, params object[] p) { DataSet ds = new DataSet(); using (NpgsqlConnection connection = GetConnection()) using (NpgsqlCommand command = new NpgsqlCommand()) { PrepareCommand(command, connection, cmdText, p); NpgsqlDataAdapter da = new NpgsqlDataAdapter(command); da.Fill(ds); } return ds; } public static DataRow ExecuteDataRow(string cmdText, params object[] p) { DataSet ds = ExecuteDataset(cmdText, p); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return ds.Tables[0].Rows[0]; return null; } /// /// 返回受影响的行数 /// public static int ExecuteNonQuery(string cmdText, params object[] p) { using (NpgsqlConnection connection = GetConnection()) using (NpgsqlCommand command = new NpgsqlCommand()) { PrepareCommand(command, connection, cmdText, p); return command.ExecuteNonQuery(); } } /// /// 返回NpgsqlDataReader对象 /// public static NpgsqlDataReader ExecuteReader(string cmdText, params object[] p) { NpgsqlConnection connection = GetConnection(); NpgsqlCommand command = new NpgsqlCommand(); try { PrepareCommand(command, connection, cmdText, p); return command.ExecuteReader(CommandBehavior.CloseConnection); } catch { connection.Close(); throw; } } /// /// 返回结果集中的第一行第一列,忽略其他行或列 /// public static object ExecuteScalar(string cmdText, params object[] p) { using (NpgsqlConnection connection = GetConnection()) using (NpgsqlCommand command = new NpgsqlCommand()) { PrepareCommand(command, connection, cmdText, p); return command.ExecuteScalar(); } } /// /// 分页 /// public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p) { if (recordCount < 0) recordCount = int.Parse(ExecuteScalar(countText, p).ToString()); DataSet ds = new DataSet(); using(NpgsqlConnection connection = GetConnection()) using(NpgsqlCommand command = new NpgsqlCommand()) { PrepareCommand(command, connection, cmdText, p); NpgsqlDataAdapter da = new NpgsqlDataAdapter(command); da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result"); } return ds; } } }