一 新的可视化工具

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

好用的新工具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文件,自己简单写了一些常用的访问数据库方法。如下:

  public static string connectionString = PubConstant.PgConnectionString;//获得配置文件中的链接字符串
public MyDbHelperPgsql()
{
} /// <summary>
/// 执行SQL语句,返回查询的唯一值记录
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>查询的唯一值记录</returns>
public static int ExecuteSql(string SQLString)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
try
{
conn.Open();
NpgsqlCommand objCommand = new NpgsqlCommand(SQLString, conn);
int count = Convert.ToInt32(objCommand.ExecuteScalar());
return count;
}
finally
{
conn.Close();
}
}
} /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>返回影响的记录数</returns>
public static int ExecuteNonQuery(string SQLString)
{ NpgsqlCommand cmd = new NpgsqlCommand(); using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
PrepareCommand(cmd, conn, null, SQLString, null);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
} /// <summary>
/// 在事务中执行 Transact-SQL 语句并返回受影响的行数。
/// </summary>
public static int ExecuteNonQuery(string cmdText,params DbParameter[] cmdParms)
{ using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
try
{
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand();
cmd.Connection = conn;
NpgsqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
PrepareCommand(cmd, tx.Connection, tx, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
finally
{
conn.Close();
}
}
} /// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="SQLString">查询语句</param>
/// <returns>DataSet</returns>
public static DataSet Query(string SQLString)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
DataSet ds = new DataSet();
try
{
conn.Open();
using (NpgsqlCommand command = new NpgsqlCommand(SQLString, conn))
{
using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(command))
{
da.Fill(ds, "ds");
return ds;
}
}
}
finally
{ conn.Close();
} }
} /// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="cmdText">查询语句</param>
/// <param name="cmdParms">参数</param>
/// <returns>DataSet</returns>
public static DataSet ExecuteQuery(string cmdText, params DbParameter[] cmdParms)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionString))
{
using (NpgsqlCommand cmd = new NpgsqlCommand())
{
PrepareCommand(cmd, conn, null, cmdText, cmdParms);
using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
da.Fill(ds, "ds");
cmd.Parameters.Clear();
return ds;
}
}
}
} /// <summary>
/// 生成要执行的命令
/// </summary>
/// <remarks>参数的格式:冒号+参数名</remarks>
private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, 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 = CommandType.Text; if (cmdParms != null)
{
foreach (NpgsqlParameter parm in cmdParms)
{
parm.ParameterName = parm.ParameterName.Replace("@", ":").Replace("?", ":"); cmd.Parameters.Add(parm);
}
}
}

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
来源:慕课网

在\PostgreSQL\data 找到配置文件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
来源:慕课网

【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(二)的更多相关文章

  1. 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)

    版本:第一版 作者:毛鹏 杨帅 日期:20151108 简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC#环境下进行温 ...

  2. 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集

    简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...

  3. Django:学习笔记(1)——开发环境配置

    Django:学习笔记(1)——开发环境配置 Django的安装与配置 安装Django 首先,我们可以执行python -m django --version命令,查看是否已安装django. 如果 ...

  4. iOS系统提供开发环境下命令行编译工具:xcodebuild

    iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...

  5. Ubuntu 12.04环境下配置Postgresql和phppgadmin

    Ubuntu 12.04环境下配置Postgresql 9.1 和phppgadmin 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/zjianb ...

  6. [评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)

    [评测]低配环境下,PostgresQL和Mysql读写性能简单对比 原文链接:https://www.cnblogs.com/blog5277/p/10658426.html 原文作者:博客园--曲 ...

  7. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  8. angular 4 开发环境下打包文件过大

    angular 4本地开发环境下,ng server -- port 8080 -o 之后在在浏览器中查看数据请求,其中vendor.bundle.js有8.3mb,而整个传输数据大小为16.3mb ...

  9. jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)

    不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上.     其实大家安装的jdk路径下,这 ...

随机推荐

  1. 简单的python购物车

                 这几天,一直在学python,跟着视频老师做了一个比较简单的python购物车,感觉不错,分享一下 products = [['Iphone8',6888],['MacPro ...

  2. 记录下curl的使用方法

    curl是一个可以在命令行中直接发起请求的工具,基础用法如下: curl localhost:6767/1.html //返回url对应的页面内容 curl localhost:6767/1.html ...

  3. POST调用WCF方法-项目实践

    做即时通信项目时,需要与OA系统对接接口,主要目标是实现在OA里进行一项事项,通过调用我们的接口,即时通知过来,并弹出消息框提示一下.我们的即时通信使用的WCF服务进行通信,在客户端调用通信时,用的就 ...

  4. maven到Gradle,一些对比和分享

    Gradle作为一款基于Groovy语言的构建工具,已经吸引众多的ant,maven使用者转投gradle的怀抱,和Gradle相比,ant显得冗余复杂,maven显得有些死板落后,而gradle基于 ...

  5. JS-5-循环

    循环结构 循环:反复执行有关操作 * for循环 for(var i=1; i<=50; i++) { console.log("第"+i+"次说我爱你" ...

  6. MFC如何在树形图边上添加动态小地图

    MFC如何在树形图边上添加动态小地图 https://www.jianshu.com/p/7b1d828bf5db (简书无法识别缩进的...早知道先在博客园发了) (转载请注明出处) 作者:梦镜谷雨 ...

  7. 【webpack学习笔记】a04-建立开发环境

    开发环境就是在开发过程中为了方便配置的环境,生产环境就是开发完成即将上线的情况. 好了,说了句废话,切入正题. 在开发时,打包后的文件压缩成一团,报错调试的时候傻眼了有木有?每次做出修改需要到浏览器查 ...

  8. 二叉树的简单操作(Binary Tree)

    树形结构应该是贯穿整个数据结构的一个比较重要的一种结构,它的重要性不言而喻! 讲到树!一般都是讨论二叉树,而关于二叉树的定义以及概念这里不做陈诉,可自行搜索. 在C语言里面需要实现一个二叉树,我们需要 ...

  9. 活代码LINQ——09

    一.代码 ' Fig. 9.7: LINQWithListCollection.vb ' LINQ to Objects using a List(Of String). Module LINQWit ...

  10. 异构去堆叠 | 一种完美提升网络高可用SLA的方案

    行业内接入网络去堆叠已经逐步成为主流方向,在大型互联网公司也已经批量部署.但由于京东集团不同的业务需求及历史原因,没有条件完全复制目前主流的ARP转主机路由方式的去堆叠方案,这促使我们设计一种尽可能满 ...