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:数据库操作类(已封装)的更多相关文章

  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. Pie(浮点数二分)

    Pie http://poj.org/problem?id=3122 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2454 ...

  2. 常用修图工具的一些使用技巧及问题解决方法——ai

    一.ai如何修改画布大小 一. ai如何修改画布大小: 1. 左上角菜单中的文件——文档设置(也可以直接点菜单栏下边的控制栏中的文档设置) 2. 文档设置界面中,点击右上角“编辑画板“ 3. 此时面板 ...

  3. .NET中的文件IO操作实例

    1.写入文件代码: //1.1 生成文件名和设置文件物理路径 Random random = new Random(DateTime.Now.Millisecond); ); string Physi ...

  4. python之面向对象之封装

    今天我们终于进入了面向对象,今天做一下面向的封装的总结 #面向对象的封装 #这里定义了一个类,名称为Role,object是所有类的父类 class Role(object): #这里是定义实例的属性 ...

  5. iOS.AddFont

    为iOS App 添加定制字体 http://www.developers-life.com/how-to-include-ttf-fonts-to-ios-app.html http://blog. ...

  6. Codeforces 677C. Vanya and Label 位操作

    C. Vanya and Label time limit per test:1 second memory limit per test:256 megabytes input:standard i ...

  7. Autotest Weekly Report

    Autotest Weekly Report Reported by: 12/16/2013 What I Did Last Week Debug autotest scripts of ‘smart ...

  8. [BAT]批处理脚本双击可运行,但在定时计划任务中无法执行(当前工作路径不对导致的)

    一开始,红色部分我是用set AutoPath=%cd%,双击可执行,但是将这个批处理脚本放在定时任务中无法执行,后来发现在定时执行的时候,当前工作路径不是批处理脚本所在的路径,而是C:/Window ...

  9. 官网类原型模板分享——Apple

    苹果公司是美国一家高科技公司,引领全球数码产品设计潮流,是世界最具价值的品牌. 此原型正是取自苹果公司官网,网站主要以展示产品为主,排版方式采用大图配简练的文字,清爽简洁的同时突出产品优势,增大产品的 ...

  10. Redis可以作为简单搜索引擎优化查询

    在日常开发中在遇到一些大数据量的查询的时候,其实可以换种思路采用redis事先都缓存起来,然后通过redis里面进行结果集的运算. 原来的做法可能是 查询SQL太复杂,然后将SQL进行拆分成多个子SQ ...