2012-08-08 139 views
0

我已經設法連接到數據庫,但我使用下面的代碼進行連接。C#postgres數據庫連接

static void Main(string[] args) 
{ 
    using (NpgsqlConnection conn= new NpgsqlConnection(
     "Host=xxx.xx.xx.xxx;Port=5432;User Id=Admin;Password=postgres.1;Database=Test1;")) 
    { 
     conn.Open(); 

     NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM TABLE1", conn); 

     try 
     { 
      NpgsqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       for (int i = 0; i < dr.FieldCount; i++) 
       { 
        Console.Write("{0} \t", dr[i]); 
       } 
       Console.WriteLine(); 
      } 
      dr.Close(); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

    Console.ReadLine(); 
} 

顯然,我必須以某種方式生成的數據庫中的表類,並使用這些連接,而不是使用NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM TABLE1", conn);。已嘗試使用DbLinq的DbMetal,但我收到錯誤消息:

DbMetal:服務器已關閉連接。

我一直在研究這個,但我還沒有找到任何有用的東西。

如果可以,請幫助。這有點緊急。

在此先感謝。

+0

HTTP:/ /romain.blogreen.org/blog/2009/07/linq-postgresql-and-mono/可能這會有所幫助 – horgh 2012-08-08 07:28:56

+0

小心:DbLinq可能是越野車! – linquize 2012-08-08 07:40:23

+0

@horgh這些是我遵循的指示。嘗試了CMD和單聲道。它連接了一秒鐘,然後失去連接 – robertpas 2012-08-08 07:49:09

回答

1

我想你需要一個NpgsqlDataAdapter和

  DataSet ds = new DataSet(); 
      NpgsqlDataAdapter da = new NpgsqlDataAdapter(); 
      da.SelectCommand = cmd; 
      da.Fill(ds); 
      return ds; 

現在您的DataSet包含一個表中選擇(ds.Tables [0])和表中的所有行的數據集

  foreach(DataRow r in ds.Tables[0].Rows) 
       Console.WriteLine(r["ColumnName"].ToString()); 
+0

我不認爲這是我正在尋找,但謝謝你的答案。有用。 – robertpas 2012-08-08 07:53:44

+0

對不起,但我想更好地理解。你能否詳細說明'爲表格生成類'? – Steve 2012-08-08 07:58:23

+0

所以我的主管說我不應該使用C#中的任何命令(如SELECT * FROM),而是使用描述數據庫中表的類。他說我應該使用這些。他建議使用具有應用程序DbMetal的dbLinq,如果給定連接字符串,它將連接到給定數據庫並返回一個類,例如:「Table1.cs」,然後將其複製到我的程序中。 – robertpas 2012-08-08 08:03:27