C# 操作PostgreSQL 数据库的示例代码
什么是PostgreSQL? PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们。 PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发。 它不受任何公司或其他私人实体控制。 它是开源的,其源代码是免费提供的。 PostgreSQL是跨平台的,可以在许多操作系统上运行,如Linux,FreeBSD,OS X,Solaris和Microsoft Windows等。 PostgreSQL的特点如下
PostgreSQL工具 有一些开放源码以及付费工具可用作PostgreSQL的前端工具。 这里列出几个被广泛使用的工具: 1. psql: 它是一个命令行工具,也是管理PostgreSQL的主要工具。 pgAdmin是PostgreSQL的免费开源图形用户界面管理工具。 2. phpPgAdmin: 它是用PHP编写的PostgreSQL的基于Web的管理工具。 它基于phpMyAdmin工具管理MySQL功能来开发。它可以用作PostgreSQL的前端工具。 3. pgFouine: 它是一个日志分析器,可以从PostgreSQL日志文件创建报告。 专有工具有 - Npgsql 提供 .NET 操作postgreSQL数据库的相关类。支持postgreSQL7.x 及以上版本。 自定义接口及操作类 接口类 public interface IDBHelper { /// <summary> /// 执行 Transact-SQL 语句并返回受影响的行数。 /// </summary> int ExecuteNonQuery(string connectionString,System.Data.CommandType cmdType,string cmdText,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 在事务中执行 Transact-SQL 语句并返回受影响的行数。 /// </summary> int ExecuteNonQuery(System.Data.Common.DbTransaction trans,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 在事务中执行查询,返回DataSet /// </summary> DataSet ExecuteQuery(System.Data.Common.DbTransaction trans,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 执行查询,返回DataSet /// </summary> DataSet ExecuteQuery(string connectionString,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 在事务中执行查询,返回DataReader /// </summary> DbDataReader ExecuteReader(System.Data.Common.DbTransaction trans,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 执行查询,返回DataReader /// </summary> DbDataReader ExecuteReader(string connectionString,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// </summary> object ExecuteScalar(System.Data.Common.DbTransaction trans,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// </summary> object ExecuteScalar(string connectionString,params System.Data.Common.DbParameter[] cmdParms); /// <summary> /// 得到数据条数 /// </summary> /// <param name="tblName">表名</param> /// <param name="condition">条件(不需要where)</param> /// <returns>数据条数</returns> int GetCount(string connectionString,string tblName,string condition); } 操作类 /// <summary> /// 数据库操作基类(for PostgreSQL) /// </summary> public class PostgreHelper : IDBHelper { /// <summary> /// 得到数据条数 /// </summary> public int GetCount(string connectionString,string condition) { StringBuilder sql = new StringBuilder("select count(*) from " + tblName); if (!string.IsNullOrEmpty(condition)) sql.Append(" where " + condition); object count = ExecuteScalar(connectionString,CommandType.Text,sql.ToString(),null); return int.Parse(count.ToString()); } /// <summary> /// 执行查询,返回DataSet /// </summary> public DataSet ExecuteQuery(string connectionString,CommandType cmdType,params DbParameter[] cmdParms) { using (NpgsqlConnection conn = new NpgsqlConnection(connectionString)) { using (NpgsqlCommand cmd = new NpgsqlCommand()) { PrepareCommand(cmd,conn,null,cmdType,cmdText,cmdParms); using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd)) { DataSet ds = new DataSet(); da.Fill(ds,"ds"); cmd.Parameters.Clear(); return ds; } } } } /// <summary> /// 在事务中执行查询,返回DataSet /// </summary> public DataSet ExecuteQuery(DbTransaction trans,params DbParameter[] cmdParms) { NpgsqlCommand cmd = new NpgsqlCommand(); PrepareCommand(cmd,trans.Connection,trans,cmdParms); NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds,"ds"); cmd.Parameters.Clear(); return ds; } /// <summary> /// 执行 Transact-SQL 语句并返回受影响的行数。 /// </summary> public int ExecuteNonQuery(string connectionString,params DbParameter[] cmdParms) { NpgsqlCommand cmd = new NpgsqlCommand(); using (NpgsqlConnection conn = new NpgsqlConnection(connectionString)) { PrepareCommand(cmd,cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } } /// <summary> /// 在事务中执行 Transact-SQL 语句并返回受影响的行数。 /// </summary> public int ExecuteNonQuery(DbTransaction trans,cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } /// <summary> /// 执行查询,返回DataReader /// </summary> public DbDataReader ExecuteReader(string connectionString,params DbParameter[] cmdParms) { NpgsqlCommand cmd = new NpgsqlCommand(); NpgsqlConnection conn = new NpgsqlConnection(connectionString); try { PrepareCommand(cmd,cmdParms); NpgsqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } } /// <summary> /// 在事务中执行查询,返回DataReader /// </summary> public DbDataReader ExecuteReader(DbTransaction trans,cmdParms); NpgsqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } /// <summary> /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// </summary> public object ExecuteScalar(string connectionString,params DbParameter[] cmdParms) { NpgsqlCommand cmd = new NpgsqlCommand(); using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)) { PrepareCommand(cmd,connection,cmdParms); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } } /// <summary> /// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// </summary> public object ExecuteScalar(DbTransaction trans,cmdParms); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } /// <summary> /// 生成要执行的命令 /// </summary> /// <remarks>参数的格式:冒号+参数名</remarks> private static void PrepareCommand(DbCommand cmd,DbConnection conn,DbTransaction trans,DbParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText.Replace("@",":").Replace("?",":").Replace("[",""").Replace("]","""); if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null) { foreach (NpgsqlParameter parm in cmdParms) { parm.ParameterName = parm.ParameterName.Replace("@",":"); cmd.Parameters.Add(parm); } } } } 数据库操作实例 写入实例: IDBHelper dbHelper = new PostgreHelper(); string connectionString = "User ID=postgres;Password=admin;Server=192.168.0.226;Port=5432;Database=MonitorDB;"; string sql = "insert into [RawLog]([ProjectID],[File],[Note]) values('项目编号',@file,'备注')"; string file = this.textBox1.Text; if (!File.Exists(file)) return; //获取文件二进制流 System.IO.FileStream fs = new System.IO.FileStream(file,System.IO.FileMode.Open); BinaryReader br = new BinaryReader(fs); byte[] b = br.ReadBytes((int)fs.Length); br.Close();fs.Close(); int r = dbHelper.ExecuteNonQuery(connectionString,sql,new Npgsql.NpgsqlParameter("@file",raw_log.File)); 注意: 1.查询语句中表名、字段名需用中括号[ ] 封起来,在操作类中会统一替换为双引号。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |