欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#访问PostGreSQL数据库的方法

程序员文章站 2023-12-13 11:26:58
我对postgresql只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考。在不熟悉的知识领域里,总是有搜索引擎可以帮到我。初...

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

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

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

C#访问PostGreSQL数据库的方法

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

C#访问PostGreSQL数据库的方法

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

C#访问PostGreSQL数据库的方法

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

C#访问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:

C#访问PostGreSQL数据库的方法

经过我的测试,如果只引用了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很简单,只为测试功能。下面截图是之前在现场截的,处理了一下,隐去了一些信息。

C#访问PostGreSQL数据库的方法

上一篇:

下一篇: