using System; using System.Collections.Generic; using System.Linq; using System.Web; using Npgsql; using System.Configuration; using System.Data; namespace PostgreSQLTest.DAO { public class NpgsqlHelper { private static string connectionString = ConfigurationManager.ConnectionStrings["PgConnection"].ConnectionString; public NpgsqlHelper() { } public static int ExecuteSql(string sql) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { using (NpgsqlCommand cmd = new NpgsqlCommand(sql, connection)) { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } } } public static int GetScalar(string sql) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { NpgsqlCommand cmd = new NpgsqlCommand(sql, connection); connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return 0; } else { return Convert.ToInt32(obj); } } } public static DataTable Query(string sql) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { DataSet ds = new DataSet(); connection.Open(); NpgsqlDataAdapter command = new NpgsqlDataAdapter(sql, connection); command.Fill(ds, "ds"); return ds.Tables[0]; } } #region 带参数的sql public static int ExecuteSql(string sql, params NpgsqlParameter[] param) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { NpgsqlCommand cmd = new NpgsqlCommand(); PrepareCommand(cmd, connection, null, sql, param); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } } public static int GetScalar(string sql, params NpgsqlParameter[] param) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { NpgsqlCommand cmd = new NpgsqlCommand(sql, connection); PrepareCommand(cmd, connection, null, sql, param); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return 0; } else { return Convert.ToInt32(obj); } } } public static DataTable Query(string sql, params NpgsqlParameter[] param) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { NpgsqlCommand cmd = new NpgsqlCommand(sql, connection); PrepareCommand(cmd, connection, null, sql, param); NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds, "ds"); cmd.Parameters.Clear(); return ds.Tables[0]; } } #endregion #region 存储过程 public static int RunProcedure(string storedProcName, IDataParameter[] parameters) { using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { NpgsqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); connection.Open(); return command.ExecuteNonQuery(); } } #endregion #region private private static void PrepareCommand(NpgsqlCommand cmd, NpgsqlConnection conn, NpgsqlTransaction trans, string cmdText, NpgsqlParameter[] param) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text;//cmdType; if (param != null) { foreach (NpgsqlParameter parameter in param) { if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } cmd.Parameters.Add(parameter); } } } private static NpgsqlCommand BuildQueryCommand(NpgsqlConnection connection, string storedProcName, IDataParameter[] parameters) { NpgsqlCommand command = new NpgsqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (NpgsqlParameter parameter in parameters) { if (parameter != null) { // 检查未分配值的输出参数,将其分配以DBNull.Value. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } command.Parameters.Add(parameter); } } return command; } #endregion } }