これまでのところ、Windows で PostgreSQL データベースを操作する場合、ODBC の代わりに Npgsql ドライバーを使用することに違いはありません。しかし今、私はそれを見つけました。
ODBCでテーブルが存在するかどうかを確認するコードがあります:
Public Function dbTableExists(ByVal dbTable As String, ByVal dbName As String) As Boolean
Dim retval As Boolean = False
Dim nCon As New OdbcConnection
Dim btCommand As OdbcCommand = Nothing
nCon.ConnectionString = "Dsn=" + dbDsn + _
";database=" + dbName & _
";server=" + dbServer + _
";port=" + dbPort + _
";uid=" + dbUser + _
";pwd=" + dbPass
Try
nCon.Open()
btCommand = New OdbcCommand("SELECT 1 FROM pg_tables WHERE tablename='" & dbTable + "'", nCon)
retval = CBool(btCommand.ExecuteNonQuery())
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
retval = False
End Try
Return retval
End Function
このコードでは、特定のテーブルが決定されたデータベースに存在する場合は True になり、そうでない場合は False になります。
ODBC関数の代わりにNpgsqlを使用しようとすると、非常に似ています:
Public Function tExists(ByVal dbTable As String, ByVal dbName As String) As Boolean
Dim retval As Boolean = False
Dim btCommand As NpgsqlCommand = Nothing
Dim nCon As New NpgsqlConnection(String.Format( _
"Server={0};Port={1};User Id={2};Password={3};Database={4};", _
dbServer, dbPort, dbUser, dbPass, dbName))
Try
nCon.Open()
btCommand = New NpgsqlCommand("SELECT 1 FROM pg_tables WHERE tablename='" & dbTable + "'", nCon)
retval = CBool(btCommand.ExecuteNonQuery())
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
retval = False
End Try
Return retval
End Function
しかし、これは期待どおりには機能しません。
特定のテーブルが存在するかどうかに関係なく、結果として常に True を取得します。
Npgsql関数を機能させる方法はありますか?