博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#-操作PostgreSQL-数据库
阅读量:4283 次
发布时间:2019-05-27

本文共 8982 字,大约阅读时间需要 29 分钟。

一、第三方类库

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

二、自定义接口及操作类

2.1接口类

public interface IDBHelper    {        ///         /// 执行 Transact-SQL 语句并返回受影响的行数。        ///         int ExecuteNonQuery(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 在事务中执行 Transact-SQL 语句并返回受影响的行数。        ///         int ExecuteNonQuery(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 在事务中执行查询,返回DataSet        ///         DataSet ExecuteQuery(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 执行查询,返回DataSet        ///         DataSet ExecuteQuery(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 在事务中执行查询,返回DataReader        ///         DbDataReader ExecuteReader(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 执行查询,返回DataReader        ///         DbDataReader ExecuteReader(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。        ///         object ExecuteScalar(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。        ///         object ExecuteScalar(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);         ///         /// 得到数据条数        ///         /// 表名        /// 条件(不需要where)        /// 
数据条数
int GetCount(string connectionString, string tblName, string condition); }

2.2 操作类

///     /// 数据库操作基类(for PostgreSQL)    ///     public class PostgreHelper : IDBHelper    {        ///         /// 得到数据条数        ///         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());        }         ///         /// 执行查询,返回DataSet        ///         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;                    }                }            }        }         ///         /// 在事务中执行查询,返回DataSet        ///         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;        }         ///         /// 执行 Transact-SQL 语句并返回受影响的行数。        ///         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;            }        }         ///         /// 在事务中执行 Transact-SQL 语句并返回受影响的行数。        ///         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;        }         ///         /// 执行查询,返回DataReader        ///         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;            }        }         ///         /// 在事务中执行查询,返回DataReader        ///         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;        }         ///         /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。        ///         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;            }        }         ///         /// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。        ///         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;        }         ///         /// 生成要执行的命令        ///         /// 
参数的格式:冒号+参数名
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数据库只直接支持(冒号+参数名)的参数方式

转载地址:http://vidgi.baihongyu.com/

你可能感兴趣的文章
安卓系统定制常见问题解决
查看>>
Android系统默认值的设置
查看>>
音频和视频播放
查看>>
Android常用固件修改
查看>>
AudioFlinger,AudioPolicyService and Audio track分析
查看>>
Android 5.x 权限问题解决方法
查看>>
linux重定向及nohup不输出的方法
查看>>
Android 在 SElinux下 如何获得对一个内核节点的访问权限
查看>>
Android6.0 selinux没有对某个文件的权限(又neverAllow)处理方法
查看>>
Android如何判断当前手机是否正在播放音乐,并获取到正在播放的音乐的信息
查看>>
Android 6.0 新功能及主要 API 变更
查看>>
linux获取时间函数及计算时间差
查看>>
Android中的Audio播放:控制Audio输出通道切换
查看>>
Android中的Audio播放:竞争Audio之Audio Focus的应用
查看>>
Android之PowerManager电源管理
查看>>
Android6.0.1音乐apk获得audioFocus的流程
查看>>
怎么在编译时打印log
查看>>
怎么添加一个tinymix可执行文件的te文件
查看>>
usb BC1.2的三种端口
查看>>
linux下的"BusHound"——usb_mon非常好
查看>>