zoukankan      html  css  js  c++  java
  • 【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(二)

    一 新的可视化工具

        因为前文所提到的,看不到外部服务器和外部表的问题,我更换了可视化工具。

        好用的新工具PostgreSQL Maestro!  


        当然如此好用的工具不是免费的,如果想免费使用还请自己去找,本文不提供此类下载。

        1.1 这里发现的问题是,postgreSql查询的字段如果是大写,那必须要加双引号,不然无法查询到该字段,例如:

        表a字段名为大写的ID,NAME,TYPE,REMARK,

        查询

    select ID,NAME,TYPE,REMARK from a

       是会说没有ID这个字段的,

       要改为

    select "ID","NAME","TYPE","REMARK" from a

        才可以正常执行。所以建议外部表可以把字段名改为全小写。但在使用全小写字段时,语句字段使用大写不加双引号却是可以执行的!运行创建表字段的脚本时,字段大写但不加双引号,添加的字段名会是全小写!还真挺绕的。

        1.2还有一个问题是,在执行为字段添加注释的脚本时,由于是中文,在PostgreSQL Maestro工具中某些中文会引起报错

        而在pgAdmin中执行就没有问题,也是有点神奇的现象。初步推测是PostgreSQL Maestro编码的问题,有待以后研究考证。

    二 在.NET项目中访问postgreSql数据库

      2.1 第三方类库

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

      2.2 PostgreSQLHelper类

        综合了网上其大佬的一些写法,再模仿oracle已经写好的helper文件,自己简单写了一些常用的访问数据库方法。如下:

      1  public static string connectionString = PubConstant.PgConnectionString;//获得配置文件中的链接字符串
      2         public MyDbHelperPgsql()
      3         {            
      4         } 
      5 
      6         /// <summary>
      7         /// 执行SQL语句,返回查询的唯一值记录
      8         /// </summary>
      9         /// <param name="SQLString">SQL语句</param>
     10         /// <returns>查询的唯一值记录</returns>
     11         public static int ExecuteSql(string SQLString)
     12         {
     13             using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
     14             {
     15                 try
     16                 {
     17                     conn.Open();
     18                     NpgsqlCommand objCommand = new NpgsqlCommand(SQLString, conn);
     19                     int count = Convert.ToInt32(objCommand.ExecuteScalar());
     20                     return count;
     21                 }
     22                 finally
     23                 {
     24                     conn.Close();
     25                 }
     26             }
     27         }
     28 
     29         /// <summary>
     30         /// 执行SQL语句,返回影响的记录数
     31         /// </summary>
     32         /// <param name="SQLString">SQL语句</param>
     33         /// <returns>返回影响的记录数</returns>
     34         public static int ExecuteNonQuery(string SQLString)
     35         {
     36 
     37             NpgsqlCommand cmd = new NpgsqlCommand();
     38 
     39             using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
     40             {
     41                 PrepareCommand(cmd, conn, null, SQLString, null);
     42                 int val = cmd.ExecuteNonQuery();
     43                 cmd.Parameters.Clear();
     44                 return val;
     45             }  
     46         }
     47 
     48         /// <summary>  
     49         /// 在事务中执行 Transact-SQL 语句并返回受影响的行数。  
     50         /// </summary>  
     51         public static int ExecuteNonQuery(string cmdText,params DbParameter[] cmdParms)
     52         {
     53             
     54             using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
     55             {
     56                 try
     57                 {
     58                     conn.Open();
     59                     NpgsqlCommand cmd = new NpgsqlCommand();
     60                     cmd.Connection = conn;
     61                     NpgsqlTransaction tx = conn.BeginTransaction();
     62                     cmd.Transaction = tx;
     63                     PrepareCommand(cmd, tx.Connection, tx, cmdText, cmdParms);
     64                     int val = cmd.ExecuteNonQuery();
     65                     cmd.Parameters.Clear();
     66                     return val;
     67                 }
     68                 finally
     69                 {
     70                     conn.Close();
     71                 }
     72             }
     73         }  
     74 
     75         /// <summary>
     76         /// 执行查询语句,返回DataSet
     77         /// </summary>
     78         /// <param name="SQLString">查询语句</param>
     79         /// <returns>DataSet</returns>
     80         public static DataSet Query(string SQLString)
     81         {
     82             using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
     83             {
     84                 DataSet ds = new DataSet();
     85                 try
     86                 {
     87                     conn.Open();
     88                     using (NpgsqlCommand command = new NpgsqlCommand(SQLString, conn))
     89                     {
     90                         using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(command))
     91                         {
     92                             da.Fill(ds, "ds");
     93                             return ds;
     94                         }
     95                     }
     96                 }
     97                 finally
     98                 {
     99 
    100                     conn.Close();
    101                 }
    102                 
    103             }
    104         }
    105 
    106         /// <summary>
    107         /// 执行查询语句,返回DataSet
    108         /// </summary>
    109         /// <param name="cmdText">查询语句</param>
    110         /// <param name="cmdParms">参数</param>
    111         /// <returns>DataSet</returns>
    112         public static DataSet ExecuteQuery(string cmdText, params DbParameter[] cmdParms)
    113         {
    114             using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
    115             {
    116                 using (NpgsqlCommand cmd = new NpgsqlCommand())
    117                 {
    118                     PrepareCommand(cmd, conn, null, cmdText, cmdParms);
    119                     using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd))
    120                     {
    121                         DataSet ds = new DataSet();
    122                         da.Fill(ds, "ds");
    123                         cmd.Parameters.Clear();
    124                         return ds;
    125                     }
    126                 }
    127             }
    128         }
    129 
    130 
    131 
    132         /// <summary>  
    133         /// 生成要执行的命令  
    134         /// </summary>  
    135         /// <remarks>参数的格式:冒号+参数名</remarks>  
    136         private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, string cmdText, DbParameter[] cmdParms)
    137         {
    138             if (conn.State != ConnectionState.Open)
    139                 conn.Open();
    140 
    141             cmd.Connection = conn;
    142             cmd.CommandText = cmdText.Replace("@", ":").Replace("?", ":").Replace("[", """).Replace("]", """);
    143 
    144             if (trans != null)
    145                 cmd.Transaction = trans;
    146 
    147             cmd.CommandType = CommandType.Text;
    148 
    149             if (cmdParms != null)
    150             {
    151                 foreach (NpgsqlParameter parm in cmdParms)
    152                 {
    153                     parm.ParameterName = parm.ParameterName.Replace("@", ":").Replace("?", ":");
    154 
    155                     cmd.Parameters.Add(parm);
    156                 }
    157             }
    158         }  

        Web.config中设置sql链接

    <add key="PgConnectionString" value="Server=192.xxx.xxx.xxx;Port=5432;User Id=用户名;Password=密码;Database=数据库名;"/>

        其中事务的用法还没有研究明白,NpgsqlTransaction 还没有弄懂要怎么使用。以后将补充

       

     三 远程连接postgreSql数据库

      之前提到的,整个系统调通后,要把数据库迁移到服务器上。这时本机访问远程数据库就要在服务器上进行一系列配置了。

    PostgreSQLHelper类
    作者: JerryAndTom
    链接:https://www.imooc.com/article/12444
    来源:慕课网
    PostgreSQLHelper类
    作者: JerryAndTom
    链接:https://www.imooc.com/article/12444
    来源:慕课网

      在PostgreSQLdata 找到配置文件pg_hba.conf,修改如下:

     

    # IPv4 local connections:
    host    all             all             127.0.0.1/32            md5
    host    all             all             192.xxx.xxx.1/24          md5
    # IPv6 local connections:
    #host    all             all             ::1/128                 md5
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    #host    replication     postgres        127.0.0.1/32            md5
    #host    replication     postgres        ::1/128                 md5

      添加红色部分,xxx是自己所需要允许访问的ip段。

    PostgreSQLHelper类
    作者: JerryAndTom
    链接:https://www.imooc.com/article/12444
    来源:慕课网
    PostgreSQLHelper类
    作者: JerryAndTom
    链接:https://www.imooc.com/article/12444
    来源:慕课网
  • 相关阅读:
    git提交代码
    python把&#DDDDDD转换为中文
    mac下载安装airtest
    mac安装指定版本的python
    python操作habse
    pyspark操作数据库
    Scrapy_redis爬虫项目
    python实现对列表元素是字典的排序
    postman使用
    图书推荐
  • 原文地址:https://www.cnblogs.com/fengran/p/8303914.html
Copyright © 2011-2022 走看看