一 新的可视化工具
因为前文所提到的,看不到外部服务器和外部表的问题,我更换了可视化工具。
好用的新工具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数据库
之前提到的,整个系统调通后,要把数据库迁移到服务器上。这时本机访问远程数据库就要在服务器上进行一系列配置了。
作者: JerryAndTom
链接:https://www.imooc.com/article/12444
来源:慕课网
作者: 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段。
作者: JerryAndTom
链接:https://www.imooc.com/article/12444
来源:慕课网
作者: JerryAndTom
链接:https://www.imooc.com/article/12444
来源:慕课网