最近開始做C#的DotNet的工作,因為對PostgreSQL數據庫比較有興趣,所以自己研究了一下如何訪問PostgreSQL的
數據庫的問題。
1、為了訪問PostgreSQL數據庫,需要從pgfoundry網站,下載Npgsql .Net Data Provider for Postgresql的組件。
注:因為使用的是DotNet3.5,所以下載了Npgsql2.0.6-bin-ms.net3.5sp1.zip。
2、解壓縮zip文件,把解壓縮的目錄中的Npgsql.dll、Mono.Security.dll復制到C#工程的obj目錄下,然后在VS2008中
,把 Npgsql.dll文件加入到References。
3、在需要使用Npgsql的C#文件頭,加入如下的using語句。
view plaincopy to clipboardprint?
using Npgsql;
using Npgsql;
using Npgsql;
using Npgsql;
4、創建一個PostgreSQL的數據庫連接
view plaincopy to clipboardprint?
/* 用指定的connectionString,去實例化一個NpsqlConnection的對象*/
string connectionString = "Server=127.0.0.1;Port=5432;User Id=test;Password=test;Database=testdb;"
NpgsqlConnection conn = new NpgsqlConnection(string connectionString);
// 打開一個數據庫連接,在執行相關SQL之前調用
conn.Open();
//關閉一個數據庫連接,在執行完相關SQL之后調用
conn.Close();
/* 用指定的connectionString,去實例化一個NpsqlConnection的對象*/
string connectionString = "Server=127.0.0.1;Port=5432;User Id=test;Password=test;Database=testdb;"
NpgsqlConnection conn = new NpgsqlConnection(string connectionString);
// 打開一個數據庫連接,在執行相關SQL之前調用
conn.Open();
//關閉一個數據庫連接,在執行完相關SQL之后調用
conn.Close();
/* 用指定的connectionString,去實例化一個NpsqlConnection的對象*/
string connectionString = "Server=127.0.0.1;Port=5432;User Id=test;Password=test;Database=testdb;"
NpgsqlConnection conn = new NpgsqlConnection(string connectionString);
// 打開一個數據庫連接,在執行相關SQL之前調用
conn.Open();
//關閉一個數據庫連接,在執行完相關SQL之后調用
conn.Close();
/* 用指定的connectionString,去實例化一個NpsqlConnection的對象*/
string connectionString = "Server=127.0.0.1;Port=5432;User Id=test;Password=test;Database=testdb;"
NpgsqlConnection conn = new NpgsqlConnection(string connectionString);
// 打開一個數據庫連接,在執行相關SQL之前調用
conn.Open();
//關閉一個數據庫連接,在執行完相關SQL之后調用
conn.Close();
5、用NpgsqlCommand.ExecuteScalar()方法獲得唯一值的檢索結果
view plaincopy to clipboardprint?
try
{
string sql = "select count(*) from test";
conn.Open();
NpgSqlCommand objCommand = new NpgSqlCommand(sql, conn);
int count = Convert.ToInt32(objCommand.ExecuteScalar());
}
finally
{
conn.Close();
}
try
{
string sql = "select count(*) from test";
conn.Open();
NpgSqlCommand objCommand = new NpgSqlCommand(sql, conn);
int count = Convert.ToInt32(objCommand.ExecuteScalar());
}
finally
{
conn.Close();
}
try
{
string sql = "select count(*) from test";
conn.Open();
NpgSqlCommand objCommand = new NpgSqlCommand(sql, conn);
int count = Convert.ToInt32(objCommand.ExecuteScalar());
}
finally
{
conn.Close();
}
try
{
string sql = "select count(*) from test";
conn.Open();
NpgSqlCommand objCommand = new NpgSqlCommand(sql, conn);
int count = Convert.ToInt32(objCommand.ExecuteScalar());
}
finally
{
conn.Close();
}
6、用NpgsqlCommand.ExecuteReader() 方法獲得一個結果集的檢索結果(conn的Open和Close調用省略)
view plaincopy to clipboardprint?
string sql = "select * from test";
NpgsqlCommand objCommand = new NpgsqlCommand(sql,conn);
NpgsqlDataReader dr = command.ExecuteReader();
while(dr.Read())
{
for (i = 0; i < dr.FieldCount; i++)
{
Console.Write("{0} \t", dr[i]); //獲得字段名
}
int testId = dr["id"]; // 獲得指定字段的值。(id是test表的一個字段)
……
Console.WriteLine();
}
dr.Close();
string sql = "select * from test";
NpgsqlCommand objCommand = new NpgsqlCommand(sql,conn);
NpgsqlDataReader dr = command.ExecuteReader();
while(dr.Read())
{
for (i = 0; i < dr.FieldCount; i++)
{
Console.Write("{0} \t", dr[i]); //獲得字段名
}
int testId = dr["id"]; // 獲得指定字段的值。(id是test表的一個字段)
……
Console.WriteLine();
}
dr.Close();
string sql = "select * from test";
NpgsqlCommand objCommand = new NpgsqlCommand(sql,conn);
NpgsqlDataReader dr = command.ExecuteReader();
while(dr.Read())
{
for (i = 0; i < dr.FieldCount; i++)
{
Console.Write("{0} \t", dr[i]); //獲得字段名
}
int testId = dr["id"]; // 獲得指定字段的值。(id是test表的一個字段)
……
Console.WriteLine();
}
dr.Close();
string sql = "select * from test";
NpgsqlCommand objCommand = new NpgsqlCommand(sql,conn);
NpgsqlDataReader dr = command.ExecuteReader();
while(dr.Read())
{
for (i = 0; i < dr.FieldCount; i++)
{
Console.Write("{0} \t", dr[i]); //獲得字段名
}
int testId = dr["id"]; // 獲得指定字段的值。(id是test表的一個字段)
……
Console.WriteLine();
}
dr.Close();
7、用NpgsqlCommand.ExecuteNonQuery()方法對指定表進行添加、更新和刪除一條記錄的操作
添加記錄:
view plaincopy to clipboardprint?
string sql = "insert test values (1,200)";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
string sql = "insert test values (1,200)";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
string sql = "insert test values (1,200)";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
string sql = "insert test values (1,200)";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
更新記錄
view plaincopy to clipboardprint?
sql = "update test set price=300 where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
sql = "update test set price=300 where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
sql = "update test set price=300 where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
sql = "update test set price=300 where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
刪除記錄
view plaincopy to clipboardprint?
sql = "delete from test where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
sql = "delete from test where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
sql = "delete from test where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
sql = "delete from test where id=1";
NpgsqlCommandobjCommand = new NpgsqlCommand(sql, conn);
objCommand.ExecuteNonQuery();
8、用NpgsqlDataAdapter.Fill方法,把檢索的結果集放到DataSet object中,這樣可以使用DataSet object設置
DotNet的DataGridView控件的DataSource屬性,這樣在DataGridView中顯示從表中取出的所有記錄。
view plaincopy to clipboardprint?
string sql = "select id,price from test";
DataSet ds = new DataSet();
NpgsqlDataAdapter objAdapter = new NpgsqlDataAdapter(sql, conn);
objAdapter.Fill(ds, "a"); //“a”這個表是自定義的
dgvBaseResult.DataSource = ds.Tables["a"]; //dgvBaseResult是DataGridView的一個Object。
string sql = "select id,price from test";
DataSet ds = new DataSet();
NpgsqlDataAdapter objAdapter = new NpgsqlDataAdapter(sql, conn);
objAdapter.Fill(ds, "a"); //“a”這個表是自定義的
dgvBaseResult.DataSource = ds.Tables["a"]; //dgvBaseResult是DataGridView的一個Object。
string sql = "select id,price from test";
DataSet ds = new DataSet();
NpgsqlDataAdapter objAdapter = new NpgsqlDataAdapter(sql, conn);
objAdapter.Fill(ds, "a"); //“a”這個表是自定義的
dgvBaseResult.DataSource = ds.Tables["a"]; //dgvBaseResult是DataGridView的一個Object。
string sql = "select id,price from test";
DataSet ds = new DataSet();
NpgsqlDataAdapter objAdapter = new NpgsqlDataAdapter(sql, conn);
objAdapter.Fill(ds, "a"); //“a”這個表是自定義的
dgvBaseResult.DataSource = ds.Tables["a"]; //dgvBaseResult是DataGridView的一個Object。
注:SQL語句設置也可以用下面的語句 objAdapter.SelectCommand.CommandText = sql;