2012-08-08 11 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

+0

주의 : DbLinq은 버그가있을 수 있습니다 !!! – linquize

+0

@horgh 그 지시는 내가 따라 갔다. cmd와 mono 모두 시도. 두 번째 연결 후 연결이 끊어집니다. – robertpas

답변

1

나는 당신이 NpgsqlDataAdapter와 (ds.Tables [0]) 및 해당 테이블의 모든 행을 선택 이제 데이터 집합 테이블을 포함

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

데이터 집합을 필요가 있다고 생각

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

내가 찾던 것 같지 않지만 대답 해 주셔서 감사합니다. 그것은 작동합니다. – robertpas

+0

죄송합니다.하지만 더 잘 이해하고 싶습니다. 당신은 '테이블을위한 클래스 생성'에 대해 자세히 설명해 주시겠습니까? – Steve

+0

그래서 관리자가 C#의 SELECT * FROM과 같은 명령을 사용해서는 안되며 대신 데이터베이스의 테이블을 설명하는 클래스가 있어야한다고 나와 있습니다. 그는 그것들을 사용해야한다고 말합니다. DbMetal 응용 프로그램이있는 dbLinq를 사용하는 것이 좋습니다. DbMetal은 연결 문자열이 주어진 데이터베이스에 연결되어 클래스 (예 : "Table1.cs")를 반환하고 내 프로그램에 복사합니다. – robertpas

관련 문제