C#訪問PostGreSQL資料庫的方法

來源:互聯網
上載者:User

我對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很簡單,只為測試功能。下面是之前在現場截的,處理了一下,隱去了一些資訊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.