当前位置: 移动技术网 > IT编程>开发语言>c# > C#访问PostGreSQL数据库的方法

C#访问PostGreSQL数据库的方法

2019年07月18日  | 移动技术网IT编程  | 我要评论
我对postgresql只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考。在不熟悉的知识领域里,总是有搜索引擎可以帮到我。初

我对postgresql只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考。
在不熟悉的知识领域里,总是有搜索引擎可以帮到我。

初步了解postgresql数据库及数据形态

首先我想看看postgresql的数据库以及我想要获取的数据形态是什么样子的,linux和postgresql这两个关键字我都不熟悉,搜了一下找到了一个可以连通postgresql数据库的windows客户端,叫pgadmin,我装的是iii版本,应该是比较新的,下载安装后看到界面:

点击那个电源插头的logo可以新建服务器连接

名称就是在pgadmin客户端的显示名,可以自定义。
ssl呢,有这么多选项,我不是很了解干什么用的,反正我选的允许。

端口号,默认postgresql的端口号是5432,当然可以被修改,自定义成别的端口号
全部填写完点击确定,就可以看到数据库了。
我不在客户现场,连不上postgresql的库,所以下面就不能截图了。

在pgadmin里,可以写查询语句,如果你有权限的话,可以看到返回的结果集。
我点开一个窗口,试着写了一条查询语句如下:
select top 10 * from tableobj
执行,发现结果集窗口提示语法错误,问下群里的兄弟们,得知,正确的写法应该是这样的:
select * from tableobj limit 5
语法规则跟sql语句还是有区别的。
执行,提示找不到对象“tableobj”找到tableobj的上一层容器“containerobj”,修改如下
select* from containerobj.tableobj limit 5
点击执行,终于看到了结果集。
相对sqlserver来说,pgadmin的结果集显示界面表头都有两行,一行是字段名,一行是字段的数据类型。这点很有爱。
在postgresql的查询语句中,大小写是不敏感的。
关于postgresql语法规则,在csdn上找到了《postgresql语法详细手册》,不过这家伙要三个资源分。
好了看到postgresql数据库了,下面我要尝试敲c#代码测试去取postgresql的数据。
c#连接postgresql数据库

有个东东,叫npgsql,是postgresql的一个.net数据提供程序。首先需要下载它,实际上我们只需要引用两个dll:

经过我的测试,如果只引用了npgsql.dll,那么你的程序运行起来之后会报错,提示找不到对mono.security.dll引用的依赖项。
引用了这两个dll,你还需要在你的代码中加上using。
using npgsql;
代码就很简单了。
写了个拼字符串的,比较二。txt什么什么的都是winform的textbox

复制代码 代码如下:

///
/// 根据填写的信息拼数据库连接串
///
/// 数据库连接串
private string getconnectstr()
{
   stringbuilder sb = new stringbuilder();
   string str = string.empty;
   sb.append("server=");
   sb.append(txtserver.text);
   sb.append(";port=");
   sb.append(txtport.text);
   sb.append(";user id=");
   sb.append(txtuid.text);
   sb.append(";password=");
   sb.append(txtpassword.text);
   sb.append(";database=");
   sb.append(txtdb.text);
   sb.append(";");
   str = sb.tostring();
   return str;
}

实际上数据库连接串就是这么样的一个格式
复制代码 代码如下:

"server=192.168.1.100;port=5432;userid=mike;password=secret;database=mikedb;"

///
/// 测试连接postgresql数据库
///
/// success/failure
private string testconnection()
{
   string str = getconnectstr();
   string strmessage = string.empty;
   try

   {
       npgsqlconnection conn = new npgsqlconnection(str);
       conn.open();
       strmessage = "success";
       conn.close();
   }
   catch
   {
       strmessage = "failure";
   }
   return strmessage;
}

///
/// 测试获取数据(使用要加try、catch)
///
private void testgetdata()
{
   idbconnection dbcon;
   dbcon = newnpgsqlconnection(getconnectstr());
   dbcon.open();
   idbcommand dbcmd = dbcon.createcommand();
   dbcmd.commandtext = " select * from containerobj.tableobj limit 5";
   idatareader dr = dbcmd.executereader();
   string strresult = string.empty;
   while (dr.read())
   {
       stringstrrecord_time_int = dr[0].tostring();
       stringstrip = dr[1].tostring();
       stringstrfullpath = dr[2].tostring();
       stringstrupload_size = dr[3].tostring();
       stringstrdownload_size = dr[4].tostring();
       strresult += "record_time_int: " + strrecord_time_int+ " | ip:" + strip + " | fullpath:" +strfullpath + " | upload_size:" +strupload_size + " | download_size:"+ strdownload_size + "\n";
   }
   dr.close();
    dr = null;
   lblres.text = strresult;
}

form很简单,只为测试功能。下面截图是之前在现场截的,处理了一下,隐去了一些信息。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网