Question

I cant get reliable checking for database existence in NET/Npgsql at my program startup.

Here is code:

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

This function return True no matter database exists or not. I also try with null checking on ExecuteScalar, getting Count(*) and all what I can without better result.

What to do to get it working?

Was it helpful?

Solution

Null checking on 'ExecuteScalar()' works for me (PostgreSQL 9.3 and Npgsql 2.0.12). Are you checking 'ExecuteScalar() == null'?

ExecuteScalar will return a .NET null not DBNull.Value (since it is not a record with a null value, it signifies no matching result).

I'm not a VB person but here's how I achieved it in 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;
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top