1.增、删、改通用方法

  1. /// <summary>
  2. /// 增、删、改通用方法
  3. /// </summary>
  4. /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
  5. /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
  6. /// <returns></returns>
  7. public static int ExecuteNonQuery(string commandText, NpgsqlParameter[] commandParameters)
  8. {
  9. using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
  10. {
  11. using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
  12. {
  13. cmd.Parameters.AddRange(commandParameters);
  14. conn.Open();
  15. return cmd.ExecuteNonQuery();
  16. }
  17. }
  18. }

2.读取1行记录

  1. /// <summary>
  2. /// 读取1行记录
  3. /// </summary>
  4. /// <typeparam name="T">结果集对应的Model</typeparam>
  5. /// <param name="Reader">读取结果集的SqlDataReader</param>
  6. /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
  7. /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
  8. /// <returns></returns>
  9. public static T ExecuteReader<T>(Func<NpgsqlDataReader, T> Reader, string commandText, NpgsqlParameter[] commandParameters)
  10. {
  11. T entity = default(T);
  12. using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
  13. {
  14. using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
  15. {
  16. cmd.Parameters.AddRange(commandParameters);
  17. conn.Open();
  18. using (NpgsqlDataReader sr = cmd.ExecuteReader())
  19. {
  20. while (sr.Read())
  21. {
  22. entity = Reader(sr);
  23. }
  24. }
  25. }
  26. }
  27. return entity;
  28. }

3.读取n行记录

  1. /// <summary>
  2. /// 读取n行记录
  3. /// </summary>
  4. /// <typeparam name="T">结果集对应的Model</typeparam>
  5. /// <param name="Reader">读取结果集的SqlDataReader</param>
  6. /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
  7. /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
  8. /// <returns></returns>
  9. public static List<T> ExecuteReaderList<T>(Func<NpgsqlDataReader, T> Reader, string commandText, NpgsqlParameter[] commandParameters)
  10. {
  11. List<T> list = new List<T>();
  12. using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
  13. {
  14. using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
  15. {
  16. cmd.Parameters.AddRange(commandParameters);
  17. conn.Open();
  18. using (NpgsqlDataReader sr = cmd.ExecuteReader())
  19. {
  20. while (sr.Read())
  21. {
  22. list.Add(Reader(sr));
  23. }
  24. }
  25. }
  26. }
  27. return list;
  28. }

4.读取第1行第1列记录

  1. /// <summary>
  2. /// 读取第1行第1列记录
  3. /// </summary>
  4. /// <param name="commandText">Command对象的CommandText属性(sql语句或存储过程名称)</param>
  5. /// <param name="commandParameters">Command对象的Parameters属性(sql语句或存储过程参数)</param>
  6. /// <returns></returns>
  7. public static object ExecuteScalar(string commandText, NpgsqlParameter[] commandParameters)
  8. {
  9. using (NpgsqlConnection conn = new NpgsqlConnection(datalink.PsconnectionString))
  10. {
  11. using (NpgsqlCommand cmd = new NpgsqlCommand(commandText, conn))
  12. {
  13. cmd.Parameters.AddRange(commandParameters);
  14. conn.Open();
  15. return cmd.ExecuteScalar();
  16. }
  17. }
  18. }

5.分页查询

  1. /// <summary>
  2. /// 分页查询
  3. /// </summary>
  4. /// <typeparam name="T">结果集对应的Model</typeparam>
  5. /// <param name="Reader">读取结果集的DataReader</param>
  6. /// <param name="table">数据表名称</param>
  7. /// <param name="limitation">查询条件</param>
  8. /// <param name="sidx">排序字段名称</param>
  9. /// <param name="sord">排序方式</param>
  10. /// <param name="page">页码</param>
  11. /// <param name="rows">每页的数据量</param>
  12. /// <returns></returns>
  13. public static PagedData<T> SearchPagedList<T>(Func<NpgsqlDataReader, T> Reader, string table, string sidx, string sord, int page, int rows, string limitation)
  14. {
  15. PagedData<T> result = new PagedData<T> { PageIndex = page, PageSize = rows };
  16.  
  17. string sql = "select * from \"" + table + "\" where " + limitation + " order by \"" + sidx + "\"" + " " + sord + " limit @PageSize offset (@PageIndex -1) * @PageSize;";
  18. sql += "select cast(count(*) as integer) from \"" + table + "\" where " + limitation;
  19.  
  20. using (NpgsqlConnection conn = new NpgsqlConnection(postgresqlconn.connectionString))
  21. {
  22. using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
  23. {
  24. cmd.Parameters.Add("@PageIndex", NpgsqlDbType.Integer).Value = page;
  25. cmd.Parameters.Add("@PageSize", NpgsqlDbType.Integer).Value = rows;
  26. conn.Open();
  27. using (NpgsqlDataReader sr = cmd.ExecuteReader())
  28. {
  29. result.DataList = new List<T>();
  30. while (sr.Read())
  31. {
  32. result.DataList.Add(Reader(sr));
  33. }
  34. bool bln = sr.NextResult();
  35. while (sr.Read())
  36. {
  37. result.DataCount = (int)sr[];
  38. result.PageCount = result.DataCount % result.PageSize == ? result.DataCount / result.PageSize : result.DataCount / result.PageSize + ;
  39. }
  40. }
  41. }
  42. }
  43. return result;
  44. }

6.执行事务

  1. /// <summary>
  2. /// 执行事务
  3. /// </summary>
  4. /// <param name="commandModel">Command参数对象列表</param>
  5. /// <param name="message">如果事务提交,返回受影响行数;如果事务回滚,返回异常信息。</param>
  6. /// <returns></returns>
  7. public static bool ExecuteTransaction(List<PSqlCommandModel> commandModel, out string message)
  8. {
  9. message = string.Empty;
  10. int rows = ;
  11. using (NpgsqlConnection connection = new NpgsqlConnection(datalink.PsconnectionString))
  12. {
  13. connection.Open();
  14.  
  15. NpgsqlCommand command = connection.CreateCommand();
  16. NpgsqlTransaction transaction = connection.BeginTransaction(); ;
  17.  
  18. command.Connection = connection;
  19. command.Transaction = transaction;
  20.  
  21. try
  22. {
  23. foreach (var item in commandModel)
  24. {
  25. command.CommandText = item.CommandText;
  26. command.Parameters.Clear();
  27. command.Parameters.AddRange(item.CommandParameters ?? new NpgsqlParameter[] { });
  28. rows += command.ExecuteNonQuery();
  29. }
  30. message = rows.ToString();
  31. transaction.Commit();
  32. return true;
  33. }
  34. catch (Exception e)
  35. {
  36. message = e.Message;
  37. transaction.Rollback();
  38. return false;
  39. }
  40. }
  41. }
  42. }

7.PSqlCommandModel

  1. /// <summary>
  2. /// CommandModel
  3. /// </summary>
  4. public struct PSqlCommandModel
  5. {
  6. /// <summary>
  7. /// CommandText
  8. /// </summary>
  9. public string CommandText { set; get; }
  10.  
  11. /// <summary>
  12. /// CommandParameters
  13. /// </summary>
  14. public NpgsqlParameter[] CommandParameters { set; get; }
  15. }

以下是调用,需要Person实体类

  1. public class Person
  2. {
  3. /// <summary>
  4. /// Constructor
  5. /// </summary>
  6. public Person() { }
  7.  
  8. /// <summary>
  9. /// Constructor
  10. /// </summary>
  11. /// <param name="idCard"></param>
  12. /// <param name="realName"></param>
  13. /// <param name="gender"></param>
  14. /// <param name="address"></param>
  15. public Person( string idCard, string realName, bool gender, string address)
  16. {
  17. IdCard = idCard;
  18. RealName = realName;
  19. Gender = gender;
  20. Address = address;
  21. }
  22.  
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. public int PersonId { set; get; }
  27.  
  28. /// <summary>
  29. ///
  30. /// </summary>
  31. public string IdCard { set; get; }
  32.  
  33. /// <summary>
  34. ///
  35. /// </summary>
  36. public string RealName { set; get; }
  37.  
  38. /// <summary>
  39. ///
  40. /// </summary>
  41. public bool Gender { set; get; }
  42.  
  43. /// <summary>
  44. ///
  45. /// </summary>
  46. public string Address { set; get; }
  47.  
  48. }

Person Model

  1. /// <summary>
  2. /// Insert
  3. /// </summary>
  4. /// <param name="entity"></param>
  5. /// <returns></returns>
  6. public static int Insert(Person entity)
  7. {
  8. string sql = @"insert into ""Person"" (""IdCard"",""RealName"",""Gender"",""Address"") values (@IdCard,@RealName,@Gender,@Address)";
  9. NpgsqlParameter[] cmdParams = {
  10. new NpgsqlParameter("@IdCard", NpgsqlDbType.Varchar) { Value = entity.IdCard ?? (object)DBNull.Value },
  11. new NpgsqlParameter("@RealName", NpgsqlDbType.Varchar) { Value = entity.RealName ?? (object)DBNull.Value },
  12. new NpgsqlParameter("@Gender", NpgsqlDbType.Bit) { Value = entity.Gender },
  13. new NpgsqlParameter("@Address", NpgsqlDbType.Varchar) { Value = entity.Address ?? (object)DBNull.Value },
  14. };
  15. return PostgresqlBaseDal.ExecuteNonQuery(sql, cmdParams);
  16. }
  17.  
  18. /// <summary>
  19. /// Update
  20. /// </summary>
  21. /// <param name="entity"></param>
  22. /// <returns></returns>
  23. public static int Update(Person entity)
  24. {
  25. string sql = @"update ""Person"" set ""IdCard""=@IdCard,""RealName""=@RealName,""Gender""=@Gender,""Address""=@Address where ""PersonId""=@PersonId";
  26. NpgsqlParameter[] cmdParams = {
  27. new NpgsqlParameter("@PersonId", NpgsqlDbType.Integer) { Value = entity.PersonId },
  28. new NpgsqlParameter("@IdCard", NpgsqlDbType.Varchar) { Value = entity.IdCard ?? (object)DBNull.Value },
  29. new NpgsqlParameter("@RealName", NpgsqlDbType.Varchar) { Value = entity.RealName ?? (object)DBNull.Value },
  30. new NpgsqlParameter("@Gender", NpgsqlDbType.Bit) { Value = entity.Gender },
  31. new NpgsqlParameter("@Address", NpgsqlDbType.Varchar) { Value = entity.Address ?? (object)DBNull.Value },
  32. };
  33. return PostgresqlBaseDal.ExecuteNonQuery(sql, cmdParams);
  34. }
  35.  
  36. /// <summary>
  37. /// Delete
  38. /// </summary>
  39. /// <param name="personId"></param>
  40. /// <returns></returns>
  41. public static int Delete(int personId)
  42. {
  43. string sql = @"delete from ""Person"" where ""PersonId""=@PersonId";
  44. NpgsqlParameter[] cmdParams = {
  45. new NpgsqlParameter("@PersonId", NpgsqlDbType.Integer) { Value = personId },
  46. };
  47. return PostgresqlBaseDal.ExecuteNonQuery(sql, cmdParams);
  48. }
  49.  
  50. /// <summary>
  51. /// Reader
  52. /// </summary>
  53. /// <param name="reader"></param>
  54. /// <returns></returns>
  55. private static Person Reader(NpgsqlDataReader reader)
  56. {
  57. Person newEntity = new Person();
  58. if (reader != null && !reader.IsClosed)
  59. {
  60. if (reader["PersonId"] != DBNull.Value) newEntity.PersonId = (int)reader["PersonId"];
  61. if (reader["IdCard"] != DBNull.Value) newEntity.IdCard = (string)reader["IdCard"];
  62. if (reader["RealName"] != DBNull.Value) newEntity.RealName = (string)reader["RealName"];
  63. if (reader["Gender"] != DBNull.Value) newEntity.Gender = (bool)reader["Gender"];
  64. if (reader["Address"] != DBNull.Value) newEntity.Address = (string)reader["Address"];
  65. }
  66. return newEntity;
  67. }
  68.  
  69. /// <summary>
  70. /// GetEntity
  71. /// </summary>
  72. /// <param name="personId"></param>
  73. /// <returns></returns>
  74. public static Person GetEntity(int personId)
  75. {
  76. string sql = @"select * from ""Person"" where ""PersonId""=@PersonId";
  77. NpgsqlParameter[] cmdParams = {
  78. new NpgsqlParameter("@PersonId", NpgsqlDbType.Integer) { Value = personId },
  79. };
  80. return PostgresqlBaseDal.ExecuteReader(Reader, sql, cmdParams);
  81. }

Person Dal

ADO.NET操作PostgreSQL:数据库操作类(已封装)的更多相关文章

  1. ado.net的简单数据库操作(一)

    摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容.首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在w ...

  2. 关于PHP建立数据库访问类的封装以及操作php单例模式连接数据库封装类

    建立数据库访问类的封装 <?php   class DBDA {     public $host = "localhost"; //服务器地址     public $ui ...

  3. Redis操作,数据库操作

    Redis操作,数据库操作 案例1:源码安装Redis缓存服务 案例2:常用Redis数据库操作指令 案例3:配置Redis主从服务器 1 案例1:源码安装Redis缓存服务 1.1 问题 本案例要求 ...

  4. ado.net的简单数据库操作(二)之封装SqlHelperl类

    今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ...

  5. Python 操作 PostgreSQL 数据库

    我使用的是 Python 3.7.0 PostgreSQL可以使用psycopg2模块与Python集成. sycopg2是用于Python编程语言的PostgreSQL数据库适配器. psycopg ...

  6. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  7. hibernate 操作 Postgresql 数据库报 operator does not exist: integer = character varying

    网上的说法如下: Java开发Postgresql 数据库兼容应用的问题,与Oracle有一些不同: Java类型映射数据库类型的不同,Oracle jdbc驱动程序处理Java String类型可正 ...

  8. C#/Python/MATLAB操作PostgreSQL数据库

    PostgreSQL数据库是一个功能非常强大的开源数据库,支持多种SQL特性,非常好用.此外由于结合PostGIS可以实现空间数据库功能,故非常适合GIS领域的使用.本文旨在介绍C#.Python.M ...

  9. 使用JdbcTemplate简化JDBC操作 实现数据库操作

    使用Spring JDBC框架方遍简单的完成JDBC操作,满足性能的需求且灵活性高. Spring JDBC框架由4个部分组成,即core.datasource.object.support. org ...

  10. 操作redis数据库 & 操作Excel & 开发接口

    操作redis数据库: string类型 1. 增 set,传俩个参数 key value(只要是字符串就行)2. 删 delete 传一个参数 key3. 修改 set 在目标key重新传参 key ...

随机推荐

  1. linux分区之gpt(大于2T的分区)

    1.文件系统限制: ext3块尺寸 最大文件尺寸 最大文件系统尺寸1KiB  16GiB  2TiB2KiB  256GiB  8TiB4KiB  2TiB  16TiB8KiB  16TiB  32 ...

  2. centos云服务器安装Python3记录

    题记 购买了一个月的服务器和公网ip,计划用Python与Nginx写一个web服务,于是踏上了漫漫的摸索之路. 行程 步骤 1.本地ssh连接. 2.mkdir /usr/local/python3 ...

  3. [leetcode]496. Next Greater Element I下一个较大元素

    You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...

  4. error: In function ‘void* opencv_showimg(void*)’:

    今天这个问题折磨了我一下午,终于知道是为什么了,心酸历程.....赶紧来记录一下 错误: /home/wj/workspace/Loitor_VI_Sensor_SDK_V1./SDK/src/cam ...

  5. Sql自定义表类型批量导入数据

    -- 创建自定义表类型 CREATE TYPE [dbo].[App_ProductTable] AS TABLE( [p_name] [varchar](50) NOT NULL, [p_audio ...

  6. Macbook pro睡眠状态恢复后没声音的解决办法

    杀招: sudo killall coreaudiod macos会自动重启进程,恢复声音

  7. 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 ...

  8. LR参数化类型为file显示大于100数据方法

    在做测试的时候,某些数据需要大量参数化,可以用连接数据库方式,也可以使用file类型进行参数化,而loadrunner中file类型的参数化数据只显示100条,可以调整如下配置文件进行显示数据的修改: ...

  9. stl学习记录(1)

    Effective STL 中文版学习记录 条款4 判断容器是否为空 使用empty而不是size().size()操作在实现上不是一个时间常数操作条款5 尽量使用区间成员函数代替它们的单元素兄弟.S ...

  10. 何时开始phonics学习及配套阅读训练zz

    引子:自从11月份俱乐部第一批孩子开始英文阅读,到现在三.四个月的时间过去了.很多孩子从不知道怎么读绘本甚至排斥英语,到现在能很投入地看原版书, 有些甚至主动地去寻找拼读规律.我家小宝目前也从前期的阅 ...