ADO.NET操作PostgreSQL:数据库操作类(已封装)
1.增、删、改通用方法
- /// <summary>
- /// 增、删、改通用方法
- /// </summary>
- /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
- /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
- /// <returns></returns>
- public static int ExecuteNonQuery(string commandText, NpgsqlParameter[] commandParameters)
- {
- using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
- {
- using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
- {
- cmd.Parameters.AddRange(commandParameters);
- conn.Open();
- return cmd.ExecuteNonQuery();
- }
- }
- }
2.读取1行记录
- /// <summary>
- /// 读取1行记录
- /// </summary>
- /// <typeparam name="T">结果集对应的Model</typeparam>
- /// <param name="Reader">读取结果集的SqlDataReader</param>
- /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
- /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
- /// <returns></returns>
- public static T ExecuteReader<T>(Func<NpgsqlDataReader, T> Reader, string commandText, NpgsqlParameter[] commandParameters)
- {
- T entity = default(T);
- using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
- {
- using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
- {
- cmd.Parameters.AddRange(commandParameters);
- conn.Open();
- using (NpgsqlDataReader sr = cmd.ExecuteReader())
- {
- while (sr.Read())
- {
- entity = Reader(sr);
- }
- }
- }
- }
- return entity;
- }
3.读取n行记录
- /// <summary>
- /// 读取n行记录
- /// </summary>
- /// <typeparam name="T">结果集对应的Model</typeparam>
- /// <param name="Reader">读取结果集的SqlDataReader</param>
- /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
- /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
- /// <returns></returns>
- public static List<T> ExecuteReaderList<T>(Func<NpgsqlDataReader, T> Reader, string commandText, NpgsqlParameter[] commandParameters)
- {
- List<T> list = new List<T>();
- using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
- {
- using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
- {
- cmd.Parameters.AddRange(commandParameters);
- conn.Open();
- using (NpgsqlDataReader sr = cmd.ExecuteReader())
- {
- while (sr.Read())
- {
- list.Add(Reader(sr));
- }
- }
- }
- }
- return list;
- }
4.读取第1行第1列记录
- /// <summary>
- /// 读取第1行第1列记录
- /// </summary>
- /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
- /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
- /// <returns></returns>
- public static object ExecuteScalar(string commandText, NpgsqlParameter[] commandParameters)
- {
- using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
- {
- using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
- {
- cmd.Parameters.AddRange(commandParameters);
- conn.Open();
- return cmd.ExecuteScalar();
- }
- }
- }
5.分页查询
- /// <summary>
- /// 分页查询
- /// </summary>
- /// <typeparam name="T">结果集对应的Model</typeparam>
- /// <param name="Reader">读取结果集的DataReader</param>
- /// <param name="table">数据表名称</param>
- /// <param name="limitation">查询条件</param>
- /// <param name="sidx">排序字段名称</param>
- /// <param name="sord">排序方式</param>
- /// <param name="page">页码</param>
- /// <param name="rows">每页的数据量</param>
- /// <returns></returns>
- public static PagedData<T> SearchPagedList<T>(Func<NpgsqlDataReader, T> Reader, string table, string sidx, string sord, int page, int rows, string limitation)
- {
- PagedData<T> result = new PagedData<T> { PageIndex = page, PageSize = rows };
- string sql = "select * from \"" + table + "\" where " + limitation + " order by \"" + sidx + "\"" + " " + sord + " limit @PageSize offset (@PageIndex -1) * @PageSize;";
- sql += "select cast(count(*) as integer) from \"" + table + "\" where " + limitation;
- using (NpgsqlConnection conn = new NpgsqlConnection(postgresqlconn.connectionString))
- {
- using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
- {
- cmd.Parameters.Add("@PageIndex", NpgsqlDbType.Integer).Value = page;
- cmd.Parameters.Add("@PageSize", NpgsqlDbType.Integer).Value = rows;
- conn.Open();
- using (NpgsqlDataReader sr = cmd.ExecuteReader())
- {
- result.DataList = new List<T>();
- while (sr.Read())
- {
- result.DataList.Add(Reader(sr));
- }
- bool bln = sr.NextResult();
- while (sr.Read())
- {
- result.DataCount = (int)sr[];
- result.PageCount = result.DataCount % result.PageSize == ? result.DataCount / result.PageSize : result.DataCount / result.PageSize + ;
- }
- }
- }
- }
- return result;
- }
6.执行事务
- /// <summary>
- /// 执行事务
- /// </summary>
- /// <param name="commandModel">Command参数对象列表</param>
- /// <param name="message">如果事务提交,返回受影响行数;如果事务回滚,返回异常信息。</param>
- /// <returns></returns>
- public static bool ExecuteTransaction(List<PSqlCommandModel> commandModel, out string message)
- {
- message = string.Empty;
- int rows = ;
- using (NpgsqlConnection connection = new NpgsqlConnection(datalink.PsconnectionString))
- {
- connection.Open();
- NpgsqlCommand command = connection.CreateCommand();
- NpgsqlTransaction transaction = connection.BeginTransaction(); ;
- command.Connection = connection;
- command.Transaction = transaction;
- try
- {
- foreach (var item in commandModel)
- {
- command.CommandText = item.CommandText;
- command.Parameters.Clear();
- command.Parameters.AddRange(item.CommandParameters ?? new NpgsqlParameter[] { });
- rows += command.ExecuteNonQuery();
- }
- message = rows.ToString();
- transaction.Commit();
- return true;
- }
- catch (Exception e)
- {
- message = e.Message;
- transaction.Rollback();
- return false;
- }
- }
- }
- }
7.PSqlCommandModel
- /// <summary>
- /// CommandModel
- /// </summary>
- public struct PSqlCommandModel
- {
- /// <summary>
- /// CommandText
- /// </summary>
- public string CommandText { set; get; }
- /// <summary>
- /// CommandParameters
- /// </summary>
- public NpgsqlParameter[] CommandParameters { set; get; }
- }
以下是调用,需要Person实体类
- public class Person
- {
- /// <summary>
- /// Constructor
- /// </summary>
- public Person() { }
- /// <summary>
- /// Constructor
- /// </summary>
- /// <param name="idCard"></param>
- /// <param name="realName"></param>
- /// <param name="gender"></param>
- /// <param name="address"></param>
- public Person( string idCard, string realName, bool gender, string address)
- {
- IdCard = idCard;
- RealName = realName;
- Gender = gender;
- Address = address;
- }
- /// <summary>
- ///
- /// </summary>
- public int PersonId { set; get; }
- /// <summary>
- ///
- /// </summary>
- public string IdCard { set; get; }
- /// <summary>
- ///
- /// </summary>
- public string RealName { set; get; }
- /// <summary>
- ///
- /// </summary>
- public bool Gender { set; get; }
- /// <summary>
- ///
- /// </summary>
- public string Address { set; get; }
- }
Person Model
- /// <summary>
- /// Insert
- /// </summary>
- /// <param name="entity"></param>
- /// <returns></returns>
- public static int Insert(Person entity)
- {
- string sql = @"insert into ""Person"" (""IdCard"",""RealName"",""Gender"",""Address"") values (@IdCard,@RealName,@Gender,@Address)";
- NpgsqlParameter[] cmdParams = {
- new NpgsqlParameter("@IdCard", NpgsqlDbType.Varchar) { Value = entity.IdCard ?? (object)DBNull.Value },
- new NpgsqlParameter("@RealName", NpgsqlDbType.Varchar) { Value = entity.RealName ?? (object)DBNull.Value },
- new NpgsqlParameter("@Gender", NpgsqlDbType.Bit) { Value = entity.Gender },
- new NpgsqlParameter("@Address", NpgsqlDbType.Varchar) { Value = entity.Address ?? (object)DBNull.Value },
- };
- return PostgresqlBaseDal.ExecuteNonQuery(sql, cmdParams);
- }
- /// <summary>
- /// Update
- /// </summary>
- /// <param name="entity"></param>
- /// <returns></returns>
- public static int Update(Person entity)
- {
- string sql = @"update ""Person"" set ""IdCard""=@IdCard,""RealName""=@RealName,""Gender""=@Gender,""Address""=@Address where ""PersonId""=@PersonId";
- NpgsqlParameter[] cmdParams = {
- new NpgsqlParameter("@PersonId", NpgsqlDbType.Integer) { Value = entity.PersonId },
- new NpgsqlParameter("@IdCard", NpgsqlDbType.Varchar) { Value = entity.IdCard ?? (object)DBNull.Value },
- new NpgsqlParameter("@RealName", NpgsqlDbType.Varchar) { Value = entity.RealName ?? (object)DBNull.Value },
- new NpgsqlParameter("@Gender", NpgsqlDbType.Bit) { Value = entity.Gender },
- new NpgsqlParameter("@Address", NpgsqlDbType.Varchar) { Value = entity.Address ?? (object)DBNull.Value },
- };
- return PostgresqlBaseDal.ExecuteNonQuery(sql, cmdParams);
- }
- /// <summary>
- /// Delete
- /// </summary>
- /// <param name="personId"></param>
- /// <returns></returns>
- public static int Delete(int personId)
- {
- string sql = @"delete from ""Person"" where ""PersonId""=@PersonId";
- NpgsqlParameter[] cmdParams = {
- new NpgsqlParameter("@PersonId", NpgsqlDbType.Integer) { Value = personId },
- };
- return PostgresqlBaseDal.ExecuteNonQuery(sql, cmdParams);
- }
- /// <summary>
- /// Reader
- /// </summary>
- /// <param name="reader"></param>
- /// <returns></returns>
- private static Person Reader(NpgsqlDataReader reader)
- {
- Person newEntity = new Person();
- if (reader != null && !reader.IsClosed)
- {
- if (reader["PersonId"] != DBNull.Value) newEntity.PersonId = (int)reader["PersonId"];
- if (reader["IdCard"] != DBNull.Value) newEntity.IdCard = (string)reader["IdCard"];
- if (reader["RealName"] != DBNull.Value) newEntity.RealName = (string)reader["RealName"];
- if (reader["Gender"] != DBNull.Value) newEntity.Gender = (bool)reader["Gender"];
- if (reader["Address"] != DBNull.Value) newEntity.Address = (string)reader["Address"];
- }
- return newEntity;
- }
- /// <summary>
- /// GetEntity
- /// </summary>
- /// <param name="personId"></param>
- /// <returns></returns>
- public static Person GetEntity(int personId)
- {
- string sql = @"select * from ""Person"" where ""PersonId""=@PersonId";
- NpgsqlParameter[] cmdParams = {
- new NpgsqlParameter("@PersonId", NpgsqlDbType.Integer) { Value = personId },
- };
- return PostgresqlBaseDal.ExecuteReader(Reader, sql, cmdParams);
- }
Person Dal
ADO.NET操作PostgreSQL:数据库操作类(已封装)的更多相关文章
- ado.net的简单数据库操作(一)
摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容.首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在w ...
- 关于PHP建立数据库访问类的封装以及操作php单例模式连接数据库封装类
建立数据库访问类的封装 <?php class DBDA { public $host = "localhost"; //服务器地址 public $ui ...
- Redis操作,数据库操作
Redis操作,数据库操作 案例1:源码安装Redis缓存服务 案例2:常用Redis数据库操作指令 案例3:配置Redis主从服务器 1 案例1:源码安装Redis缓存服务 1.1 问题 本案例要求 ...
- ado.net的简单数据库操作(二)之封装SqlHelperl类
今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ...
- Python 操作 PostgreSQL 数据库
我使用的是 Python 3.7.0 PostgreSQL可以使用psycopg2模块与Python集成. sycopg2是用于Python编程语言的PostgreSQL数据库适配器. psycopg ...
- ado.net的简单数据库操作(三)——简单增删改查的实际应用
果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...
- hibernate 操作 Postgresql 数据库报 operator does not exist: integer = character varying
网上的说法如下: Java开发Postgresql 数据库兼容应用的问题,与Oracle有一些不同: Java类型映射数据库类型的不同,Oracle jdbc驱动程序处理Java String类型可正 ...
- C#/Python/MATLAB操作PostgreSQL数据库
PostgreSQL数据库是一个功能非常强大的开源数据库,支持多种SQL特性,非常好用.此外由于结合PostGIS可以实现空间数据库功能,故非常适合GIS领域的使用.本文旨在介绍C#.Python.M ...
- 使用JdbcTemplate简化JDBC操作 实现数据库操作
使用Spring JDBC框架方遍简单的完成JDBC操作,满足性能的需求且灵活性高. Spring JDBC框架由4个部分组成,即core.datasource.object.support. org ...
- 操作redis数据库 & 操作Excel & 开发接口
操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...
随机推荐
- linux分区之gpt(大于2T的分区)
1.文件系统限制: ext3块尺寸 最大文件尺寸 最大文件系统尺寸1KiB 16GiB 2TiB2KiB 256GiB 8TiB4KiB 2TiB 16TiB8KiB 16TiB 32 ...
- centos云服务器安装Python3记录
题记 购买了一个月的服务器和公网ip,计划用Python与Nginx写一个web服务,于是踏上了漫漫的摸索之路. 行程 步骤 1.本地ssh连接. 2.mkdir /usr/local/python3 ...
- [leetcode]496. Next Greater Element I下一个较大元素
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...
- error: In function ‘void* opencv_showimg(void*)’:
今天这个问题折磨了我一下午,终于知道是为什么了,心酸历程.....赶紧来记录一下 错误: /home/wj/workspace/Loitor_VI_Sensor_SDK_V1./SDK/src/cam ...
- Sql自定义表类型批量导入数据
-- 创建自定义表类型 CREATE TYPE [dbo].[App_ProductTable] AS TABLE( [p_name] [varchar](50) NOT NULL, [p_audio ...
- Macbook pro睡眠状态恢复后没声音的解决办法
杀招: sudo killall coreaudiod macos会自动重启进程,恢复声音
- CentOS7下搭建基本LNMP环境,部署WordPress
系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nginx-1.12.2.tar.gz php 7.1.11 ...
- LR参数化类型为file显示大于100数据方法
在做测试的时候,某些数据需要大量参数化,可以用连接数据库方式,也可以使用file类型进行参数化,而loadrunner中file类型的参数化数据只显示100条,可以调整如下配置文件进行显示数据的修改: ...
- stl学习记录(1)
Effective STL 中文版学习记录 条款4 判断容器是否为空 使用empty而不是size().size()操作在实现上不是一个时间常数操作条款5 尽量使用区间成员函数代替它们的单元素兄弟.S ...
- 何时开始phonics学习及配套阅读训练zz
引子:自从11月份俱乐部第一批孩子开始英文阅读,到现在三.四个月的时间过去了.很多孩子从不知道怎么读绘本甚至排斥英语,到现在能很投入地看原版书, 有些甚至主动地去寻找拼读规律.我家小宝目前也从前期的阅 ...