需要引用Npgsql.dll
public class PostgreSqlHelper
{
public string connectionString = null;
public PostgreSqlHelper(string conn)
{
connectionString = conn;
}
#region 执行查询语句,返回DataSet
///
/// 执行查询语句,返回DataSet
///
///
查询语句
///
DataSet
public DataSet Query(string SQLString)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
NpgsqlDataAdapter command = new NpgsqlDataAdapter(SQLString, connection);
command.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
finally
{
connection.Close();
}
return ds;
}
}
///
/// 重载 执行查询语句,返回DataSet,用于参数化查询
///
///
查询语句
///
DataSet
public DataSet Query(string SQLString, params NpgsqlParameter[] values)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
NpgsqlCommand cmd = new NpgsqlCommand(SQLString, connection);
cmd.Parameters.AddRange(values);
NpgsqlDataAdapter command = new NpgsqlDataAdapter(cmd);
command.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
finally
{
connection.Close();
}
return ds;
}
}
///
/// 执行查询语句,返回DataSet
///
///
查询语句
///
DataSet
public DataTable Query_GetDataTable(string SQLString)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
NpgsqlDataAdapter command = new NpgsqlDataAdapter(SQLString, connection);
command.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
finally
{
connection.Close();
}
if (ds != null && ds.Tables != null && ds.Tables.Count != 0)
return ds.Tables[0];
else
return null;
}
}
///
/// 重载 执行查询语句,返回DataSet,用于参数化查询
///
///
查询语句
///
DataSet
public DataTable Query_GetDataTable(string SQLString, params NpgsqlParameter[] values)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
connection.Open();
NpgsqlCommand cmd = new NpgsqlCommand(SQLString, connection);
cmd.Parameters.AddRange(values);
NpgsqlDataAdapter command = new NpgsqlDataAdapter(cmd);
command.Fill(ds);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
finally
{
connection.Close();
}
if (ds != null && ds.Tables != null && ds.Tables.Count != 0)
return ds.Tables[0];
else
return null;
}
}
#endregion
#region 执行简单的增删查该
///
/// 执行SQL语句,返回影响的记录数
///
///
SQL语句
///
影响的记录数
public int ExecuteSql(string SQLString)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
using (NpgsqlCommand cmd = new NpgsqlCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
finally
{
cmd.Dispose();
connection.Close();
}
}
}
}
///
/// 重载用于带参数查询 执行SQL语句,返回影响的记录数
///
///
SQL语句
///
影响的记录数
public int ExecuteSql(string SQLString, params NpgsqlParameter[] values)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
using (NpgsqlCommand cmd = new NpgsqlCommand(SQLString, connection))
{
try
{
cmd.Parameters.AddRange(values);
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
finally
{
cmd.Dispose();
connection.Close();
}
}
}
}
#endregion
#region 执行Command.ExecuteNonQuery(),返回受影响的行数
///
/// 执行Command.ExecuteNonQuery(),返回受影响的行数
///
///
执行的语句
///
params传入的参数
///
public int ExecuteNonQuery(string cmdText, params NpgsqlParameter[] parameters)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
int result = -1;
conn.Open();
using (NpgsqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
if (parameters == null)
{
result = cmd.ExecuteNonQuery();
}
else
{
cmd.Parameters.AddRange(parameters);
result = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
return result;
}
}
}
#endregion
#region 执行Command.ExecuteScalar(),返回首行首列
///
/// 执行Command.ExecuteScalar(),返回首行首列
///
///
执行的语句
///
params传入的参数
///
public object ExecuteScalar(string cmdText, params NpgsqlParameter[] parameters)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
object obj = null;
conn.Open();
using (NpgsqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
if (parameters == null)
{
obj = cmd.ExecuteScalar();
}
else
{
cmd.Parameters.AddRange(parameters);
obj = cmd.ExecuteScalar();
cmd.Parameters.Clear();
}
return obj;
}
}
}
#endregion
#region 事务
public struct hashsql
{
public string sql;
public NpgsqlParameter[] para;
}
public int SqlList(List
SQLStringList)
{
int result = 0;
using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
conn.Open();
using (NpgsqlTransaction trans = conn.BeginTransaction())
{
NpgsqlCommand cmd = new NpgsqlCommand();
try
{
//循环
foreach (hashsql myDE in SQLStringList)
{
string cmdText = myDE.sql;
NpgsqlParameter[] cmdParms = myDE.para;
PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
trans.Commit();
result = 1;
}
catch
{
trans.Rollback();
result = 0;
}
}
}
return result;
}
#endregion
private static void PrepareCommand(NpgsqlCommand cmd, NpgsqlConnection conn, NpgsqlTransaction trans, string cmdText, NpgsqlParameter[] cmdParms)
{
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 (cmdParms != null)
{
foreach (NpgsqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
}