C#訪問PostGreSQL數(shù)據(jù)庫的方法
我對PostGreSQL只是一知半解,記錄這個過程是希望如果以后微軟技術(shù)方向的人遇到類似的需求,可以有個比較直接的的參考。
在不熟悉的知識領(lǐng)域里,總是有搜索引擎可以幫到我。
初步了解PostGreSQL數(shù)據(jù)庫及數(shù)據(jù)形態(tài)
首先我想看看PostGreSQL的數(shù)據(jù)庫以及我想要獲取的數(shù)據(jù)形態(tài)是什么樣子的,Linux和PostGreSQL這兩個關(guān)鍵字我都不熟悉,搜了一下找到了一個可以連通PostGreSQL數(shù)據(jù)庫的Windows客戶端,叫pgAdmin,我裝的是III版本,應(yīng)該是比較新的,下載安裝后看到界面:
點擊那個電源插頭的logo可以新建服務(wù)器連接

名稱就是在PGAdmin客戶端的顯示名,可以自定義。
SSL呢,有這么多選項,我不是很了解干什么用的,反正我選的允許。
端口號,默認PostGreSQL的端口號是5432,當(dāng)然可以被修改,自定義成別的端口號
全部填寫完點擊確定,就可以看到數(shù)據(jù)庫了。
我不在客戶現(xiàn)場,連不上PostGreSQL的庫,所以下面就不能截圖了。
在PGAdmin里,可以寫查詢語句,如果你有權(quán)限的話,可以看到返回的結(jié)果集。
我點開一個窗口,試著寫了一條查詢語句如下:
Select top 10 * from TableObj
執(zhí)行,發(fā)現(xiàn)結(jié)果集窗口提示語法錯誤,問下群里的兄弟們,得知,正確的寫法應(yīng)該是這樣的:
Select * from TableObj limit 5
語法規(guī)則跟sql語句還是有區(qū)別的。
執(zhí)行,提示找不到對象“TableObj”找到TableObj的上一層容器“ContainerObj”,修改如下
SELECT* FROM ContainerObj.TableObj limit 5
點擊執(zhí)行,終于看到了結(jié)果集。
相對sqlserver來說,PGAdmin的結(jié)果集顯示界面表頭都有兩行,一行是字段名,一行是字段的數(shù)據(jù)類型。這點很有愛。
在PostGreSQL的查詢語句中,大小寫是不敏感的。
關(guān)于PostgreSql語法規(guī)則,在CSDN上找到了《PostgreSql語法詳細手冊》,不過這家伙要三個資源分。
好了看到PostGreSQL數(shù)據(jù)庫了,下面我要嘗試敲C#代碼測試去取PostGreSQL的數(shù)據(jù)。
C#連接PostGreSQL數(shù)據(jù)庫
有個東東,叫Npgsql,是PostgreSQL的一個.NET數(shù)據(jù)提供程序。首先需要下載它,實際上我們只需要引用兩個dll:
經(jīng)過我的測試,如果只引用了Npgsql.dll,那么你的程序運行起來之后會報錯,提示找不到對Mono.Security.dll引用的依賴項。
引用了這兩個dll,你還需要在你的代碼中加上using。
using Npgsql;
代碼就很簡單了。
寫了個拼字符串的,比較二。txt什么什么的都是Winform的textbox
///
/// 根據(jù)填寫的信息拼數(shù)據(jù)庫連接串
///
/// 數(shù)據(jù)庫連接串
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;
}
實際上數(shù)據(jù)庫連接串就是這么樣的一個格式
"Server=192.168.1.100;Port=5432;UserId=mike;Password=secret;Database=mikedb;"
///
/// 測試連接PostGreSQL數(shù)據(jù)庫
///
/// 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;
}
///
/// 測試獲取數(shù)據(jù)(使用要加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很簡單,只為測試功能。下面截圖是之前在現(xiàn)場截的,處理了一下,隱去了一些信息。
相關(guān)文章
如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境詳解
這篇文章主要給大家介紹了關(guān)于如何使用C#將Tensorflow訓(xùn)練的.pb文件用在生產(chǎn)環(huán)境的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11C#中使用DevExpress中的ChartControl實現(xiàn)極坐標(biāo)圖的案例詳解
這篇文章主要介紹了在C#中使用DevExpress中的ChartControl實現(xiàn)極坐標(biāo)圖,本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也試過,但是有一個弊端就是實現(xiàn)極坐標(biāo)圖的時候,第一個點和最后一個點總是自動多一條閉合線,會形成一個閉合的多邊形,因此升級了一下版2022-02-02C#實現(xiàn)TreeView節(jié)點拖拽的方法
這篇文章主要介紹了C#實現(xiàn)TreeView節(jié)點拖拽的方法,涉及C#針對TreeView節(jié)點的動態(tài)添加及移除技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09C# DataTable中查詢指定字段名稱的數(shù)據(jù)
這篇文章主要介紹了C# DataTable中查詢指定字段名稱的數(shù)據(jù),本文直接給出實例代碼,簡單易懂,需要的朋友可以參考下2015-06-06