C#-操作PostgreSQL-数据库

2024-05-25 23:32

本文主要是介绍C#-操作PostgreSQL-数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、第三方类库

Npgsql提供 .NET 操作postgreSQL数据库的相关类。支持postgreSQL7.x 及以上版本。

二、自定义接口及操作类

2.1接口类

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, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);/// <summary>/// 在事务中执行查询,返回DataSet/// </summary>DataSet ExecuteQuery(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);/// <summary>/// 执行查询,返回DataSet/// </summary>DataSet ExecuteQuery(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);/// <summary>/// 在事务中执行查询,返回DataReader/// </summary>DbDataReader ExecuteReader(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);/// <summary>/// 执行查询,返回DataReader/// </summary>DbDataReader ExecuteReader(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);/// <summary>/// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。/// </summary>object ExecuteScalar(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);/// <summary>/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。/// </summary>object ExecuteScalar(string connectionString, System.Data.CommandType cmdType, string cmdText, 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);}

2.2 操作类

/// <summary>/// 数据库操作基类(for PostgreSQL)/// </summary>public class PostgreHelper : IDBHelper{/// <summary>/// 得到数据条数/// </summary>public int GetCount(string connectionString, string tblName, 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, string cmdText,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, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, 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, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();using (NpgsqlConnection conn = new NpgsqlConnection(connectionString)){PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return val;}}/// <summary>/// 在事务中执行 Transact-SQL 语句并返回受影响的行数。/// </summary>public int ExecuteNonQuery(DbTransaction trans, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();return val;}/// <summary>/// 执行查询,返回DataReader/// </summary>public DbDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();NpgsqlConnection conn = new NpgsqlConnection(connectionString);try{PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);NpgsqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.Parameters.Clear();return rdr;}catch{conn.Close();throw;}}/// <summary>/// 在事务中执行查询,返回DataReader/// </summary>public DbDataReader ExecuteReader(DbTransaction trans, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);NpgsqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.Parameters.Clear();return rdr;}/// <summary>/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。/// </summary>public object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();using (NpgsqlConnection connection = new NpgsqlConnection(connectionString)){PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;}}/// <summary>/// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。/// </summary>public object ExecuteScalar(DbTransaction trans, CommandType cmdType, string cmdText,params DbParameter[] cmdParms){NpgsqlCommand cmd = new NpgsqlCommand();PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;}/// <summary>/// 生成要执行的命令/// </summary>/// <remarks>参数的格式:冒号+参数名</remarks>private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, CommandType cmdType,string cmdText, 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("@", ":").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, CommandType.Text,sql,new Npgsql.NpgsqlParameter("@file",raw_log.File));

注意:

1.查询语句中表名、字段名需用中括号[ ] 封起来,在操作类中会统一替换为双引号。

2.命令语句中的参数名格式为:@或?+ 参数名,在操作类中为统一替换为冒号。

3.对于二进制流、日期等特殊类型需采用2中的参数形式

4.经多次测试postgreSQL数据库只直接支持(冒号+参数名)的参数方式


这篇关于C#-操作PostgreSQL-数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002921

相关文章

数据库修复实例2(副本出入口修复)

修复目标 修复Bfa-5人副本出入口(Bfa 为 WOW 争霸艾泽拉斯版本) SET @OGUID := 7000316;SET @ATID := 69;SET @ATCP := 56;SET @ATIDSPAWN := 70;SET @SPAWNGROUP := 1251;SET @WORLDSAFELOCID := 100042;-- Adjust GameObjectsDEL

SQL Server中CROSS APPLY连接操作

在 SQL Server 中,CROSS APPLY 是一个连接操作,它类似于 INNER JOIN,但有一些关键差异,特别是在处理表值函数(TVF)、行集函数或子查询时。CROSS APPLY 返回对于外部查询中的每一行,在内部查询或函数中都存在的行。但是,如果内部查询或函数对于外部查询的某行没有返回任何行,则该外部查询的行不会出现在结果集中。 以下是一些关键点,用于理解 CROSS APPL

POI:接收上传上来的excel,解析并导入到数据库

目录 1、控制层 2、业务层(主要逻辑) 1、控制层         因为前端设置了只能上传1个文件,这里直接取一个。 @RequestMapping(value = "/shebeiDaoru.ctrl", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")public @Res

数据库原理(关系数据库规范化理论)——(4)

一、关系模式规范化的必要性 1.关系可能出现的问题 数据冗余大;插入异常;删除异常;更新异常; 2.关系模式应满足的基本要求 元组的每个分量必须是不可分割的数据项;数据库中的数据冗余应尽可能少;不要出现插入异常;不要出现删除异常;不要出现更新异常;数据库设计应考虑查询要求,数据组织要合理。 二、函数依赖及关系的范式 1.函数依赖类型 (1)完全函数依赖: (2)部分函数依赖:

Neo4j图形数据库查询,Cypher语言详解

Cypher语言详解 Cypher是一种专为Neo4j图形数据库设计的声明式查询语言。它类似于SQL,但其设计目标是便于表达图数据库中常见的图形结构和操作。本文将详细介绍Cypher语言的基本语法、常见操作、高级功能以及使用Cypher进行图形数据分析的技巧。 1. Cypher的基本概念 Cypher查询语言通过简单、直观的语法,使得用户可以方便地对图数据库进行查询、插入、更新和删除操作。

初识数据库及Mysql安装管理

初识数据库及Mysql安装管理 了解数据库数据库的概念数据库的分类关系型数据库(SQL)非关系型的数据库(NoSQL) SQL语句SQL语言分类: MySQL中6种常见的约束: Mysql安装(CentOS7)源码编译安装一、准备工作二、安装环境依赖包三、配置软件模块四、编译及安装五、修改mysql 配置文件六、优化mysql七、初始化数据库八、启动mysql yum安装下载MySQL官方的

AnyQ如何配置solr动态读取数据库——AnyQ系列之二

一、anyq容器host模式运行 由于anyq容器,后期还会有其他端口需要访问,比如solr的webapp页面端口就是8900,等等。所以可以采用host方法run一个新的容器。 #提交anyq镜像,生成新镜像anyq-host,并run新的anyq-host容器docker stop anyqdocker commit anyq anyq-host#使用--privileged=tru

【吉林大学Java程序设计】第10章:Java数据库编程技术(JDBC)

第10章:Java数据库编程技术(JDBC) 1. 数据库系统概述数据库系统SQL语言 2.JDBC概述JDBC APIJDBC Driver API 3.JDBC编程步骤示例1:MySQL数据库操作程序示例2:Java DB数据库操作程序 重点小结 1. 数据库系统概述 数据库系统 SQL语言 2.JDBC概述 JDBC API JDBC

JMU 数科 数据库与数据仓库期末总结(4)实验设计题

E-R图 实体-关系图 E-R图的组成要素主要包括: 实体(Entity):实体代表现实世界中可相互区别的对象或事物,如顾客、订单、产品等。在图中,实体通常用矩形表示,并在矩形内标注实体的名称。 属性(Attribute):属性描述实体的特征或性质,比如顾客的姓名、年龄、地址等。属性在E-R图中一般位于实体的下方,用椭圆表示,并通过连线与实体相连。 关系(Relationship):关

SQL笔记——表的操作、数据修改、列的属性和查询操作

表的操作 在之前应该有一个数据库 先创建一个 user 库,然后可以查看、修改、删除 create databases user;//创建show databases; //展示alter databases user //修改修改的内容;drop databases user1;//删除或者是drop databases if exists user1; 添加数据之前肯定要