国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 操作PostgreSQL 數(shù)據(jù)庫的示例代碼

2020-01-24 00:25:45
字體:
供稿:網(wǎng)友

什么是PostgreSQL?

PostgreSQL是一個功能強大的開源對象關(guān)系數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。 用于安全地存儲數(shù)據(jù); 支持最佳做法,并允許在處理請求時檢索它們。

PostgreSQL(也稱為Post-gress-Q-L)由PostgreSQL全球開發(fā)集團(全球志愿者團隊)開發(fā)。 它不受任何公司或其他私人實體控制。 它是開源的,其源代碼是免費提供的。

PostgreSQL是跨平臺的,可以在許多操作系統(tǒng)上運行,如Linux,F(xiàn)reeBSD,OS X,Solaris和Microsoft Windows等。

PostgreSQL的特點如下

  1. PostgreSQL可在所有主要操作系統(tǒng)(即Linux,UNIX(AIX,BSD,HP-UX,SGI IRIX,Mac OS X,Solaris,Tru64)和Windows等)上運行。
  2. PostgreSQL支持文本,圖像,聲音和視頻,并包括用于C/C++,Java,Perl,Python,Ruby,Tcl和開放數(shù)據(jù)庫連接(ODBC)的編程接口。
  3. PostgreSQL支持SQL的許多功能,例如復(fù)雜SQL查詢,SQL子選擇,外鍵,觸發(fā)器,視圖,事務(wù),多進程并發(fā)控制(MVCC),流式復(fù)制(9.0),熱備(9.0))。
  4. 在PostgreSQL中,表可以設(shè)置為從“父”表繼承其特征。
  5. 可以安裝多個擴展以向PostgreSQL添加附加功能。

PostgreSQL工具

有一些開放源碼以及付費工具可用作PostgreSQL的前端工具。 這里列出幾個被廣泛使用的工具:

1. psql:

它是一個命令行工具,也是管理PostgreSQL的主要工具。

pgAdmin是PostgreSQL的免費開源圖形用戶界面管理工具。

2. phpPgAdmin:

它是用PHP編寫的PostgreSQL的基于Web的管理工具。 它基于phpMyAdmin工具管理MySQL功能來開發(fā)。它可以用作PostgreSQL的前端工具。

3. pgFouine:

它是一個日志分析器,可以從PostgreSQL日志文件創(chuàng)建報告。 專有工具有 -
Lightning Admin for PostgreSQL, Borland Kylix, DBOne, DBTools Manager PgManager, Rekall, Data Architect, SyBase Power Designer, Microsoft Access, eRWin, DeZign for Databases, PGExplorer, Case Studio 2, pgEdit, RazorSQL, MicroOLAP Database Designer, Aqua Data Studio, Tuples, EMS Database Management Tools for PostgreSQL, Navicat, SQL Maestro Group products for PostgreSQL, Datanamic DataDiff for PostgreSQL, Datanamic SchemaDiff for PostgreSQL, DB MultiRun PostgreSQL Edition, SQLPro, SQL Image Viewer, SQL Data Sets 等等。

Npgsql

提供 .NET 操作postgreSQL數(shù)據(jù)庫的相關(guān)類。支持postgreSQL7.x 及以上版本。

自定義接口及操作類

接口類

public interface IDBHelper  {    /// <summary>    /// 執(zhí)行 Transact-SQL 語句并返回受影響的行數(shù)。    /// </summary>    int ExecuteNonQuery(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 在事務(wù)中執(zhí)行 Transact-SQL 語句并返回受影響的行數(shù)。    /// </summary>    int ExecuteNonQuery(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 在事務(wù)中執(zhí)行查詢,返回DataSet    /// </summary>    DataSet ExecuteQuery(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 執(zhí)行查詢,返回DataSet    /// </summary>    DataSet ExecuteQuery(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 在事務(wù)中執(zhí)行查詢,返回DataReader    /// </summary>    DbDataReader ExecuteReader(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 執(zhí)行查詢,返回DataReader    /// </summary>    DbDataReader ExecuteReader(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 在事務(wù)中執(zhí)行查詢,并返回查詢所返回的結(jié)果集中第一行的第一列。忽略其他列或行。    /// </summary>    object ExecuteScalar(System.Data.Common.DbTransaction trans, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 執(zhí)行查詢,并返回查詢所返回的結(jié)果集中第一行的第一列。忽略其他列或行。    /// </summary>    object ExecuteScalar(string connectionString, System.Data.CommandType cmdType, string cmdText, params System.Data.Common.DbParameter[] cmdParms);    /// <summary>    /// 得到數(shù)據(jù)條數(shù)    /// </summary>    /// <param name="tblName">表名</param>    /// <param name="condition">條件(不需要where)</param>    /// <returns>數(shù)據(jù)條數(shù)</returns>    int GetCount(string connectionString, string tblName, string condition);  }

操作類

/// <summary>  /// 數(shù)據(jù)庫操作基類(for PostgreSQL)  /// </summary>  public class PostgreHelper : IDBHelper  {    /// <summary>    /// 得到數(shù)據(jù)條數(shù)    /// </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>    /// 執(zhí)行查詢,返回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>    /// 在事務(wù)中執(zhí)行查詢,返回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>    /// 執(zhí)行 Transact-SQL 語句并返回受影響的行數(shù)。    /// </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>    /// 在事務(wù)中執(zhí)行 Transact-SQL 語句并返回受影響的行數(shù)。    /// </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>    /// 執(zhí)行查詢,返回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>    /// 在事務(wù)中執(zhí)行查詢,返回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>    /// 執(zhí)行查詢,并返回查詢所返回的結(jié)果集中第一行的第一列。忽略其他列或行。    /// </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>    /// 在事務(wù)中執(zhí)行查詢,并返回查詢所返回的結(jié)果集中第一行的第一列。忽略其他列或行。    /// </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>    /// 生成要執(zhí)行的命令    /// </summary>    /// <remarks>參數(shù)的格式:冒號+參數(shù)名</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);        }      }    }  }

數(shù)據(jù)庫操作實例

寫入實例:

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.查詢語句中表名、字段名需用中括號[ ] 封起來,在操作類中會統(tǒng)一替換為雙引號。
2.命令語句中的參數(shù)名格式為:@或?+ 參數(shù)名,在操作類中為統(tǒng)一替換為冒號。
3.對于二進制流、日期等特殊類型需采用2中的參數(shù)形式
4.經(jīng)多次測試postgreSQL數(shù)據(jù)庫只直接支持(冒號+參數(shù)名)的參數(shù)方式

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉善左旗| 杭锦后旗| 伊春市| 称多县| 上林县| 龙门县| 北川| 兴安县| 平乡县| 灵台县| 睢宁县| 那坡县| 疏勒县| 娱乐| 柳州市| 金湖县| 西峡县| 漯河市| 金华市| 高邮市| 卢龙县| 江达县| 海伦市| 山丹县| 宁海县| 西林县| 台中县| 宁陵县| 淳化县| 南投市| 八宿县| 蕉岭县| 昌邑市| 利辛县| 手游| 简阳市| 吴忠市| 黎城县| 庆元县| 通城县| 武功县|