2013-10-30 64 views
1

我無法在我的程序啓動時在NET/Npgsql中獲得可靠的數據庫存在檢查。PostgreSQL,獲取數據庫與Npgsql存在

這裏是代碼:

Public Function dbExists(ByVal _dbName As String) As Boolean 

    Dim retval As Boolean = False 
    Using mCon As New NpgsqlConnection(String.Format(_ 
       "Server={0};Port={1};User Id={2};Password={3};", _ 
        dbserver, dbport, "postgres", dbpass)) 
     Try 
      mCon.Open() 
      Using nCom = New NpgsqlCommand("SELECT 1 FROM pg_database WHERE datname='" + _dbName + "'", mCon) 
       retval = CBool(nCom.ExecuteScalar()) 
      End Using 
     Catch ex As Exception 
      retval = False 
     End Try 
    End Using 

    Return retval 
End Function 

該函數返回true不管數據庫的存在與否。 我也嘗試在ExecuteScalar上進行空檢查,得到Count(*)以及所有我沒有更好結果的東西。

怎麼辦才能讓它工作?

回答

3

檢查'ExecuteScalar()'對我有效(PostgreSQL 9.3和Npgsql 2.0.12)。 你在檢查'ExecuteScalar()== null'嗎?

的ExecuteScalar會返回一個.NET nullDBNull.Value(因爲它不是一個空值的記錄,它表示沒有匹配的結果)。

我不是一個VB的人,但在這裏就是我如何在C#中實現它:

bool dbExists; 

using (NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=postgres;User Id=postgres;Password=testpass")) 
{ 
    conn.Open(); 
    string cmdText = "SELECT 1 FROM pg_database WHERE datname='temp'"; 
    using (NpgsqlCommand cmd = new NpgsqlCommand(cmdText, conn)) 
    { 
     dbExists = cmd.ExecuteScalar() != null; 
    } 
} 
+0

感謝菲爾,我已經瑤池一個解決方案,但您的建議是有用的。 –

相關問題