До сих пор я не вижу никакой разницы в использовании драйвера Npgsql вместо ODBC при работе с базой данных PostgreSQL в Windows. Но теперь я нахожу один.
У меня есть такой код, чтобы проверить, существует ли таблица с 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 в противном случае.
Когда я пытаюсь использовать Npgsql вместо ODBC, функция очень похожа:
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?
executeNonQuery()
? Вы выполняете запрос, поэтому не следует ли вам использоватьexecuteQuery()
(или что-то подобное - я не знаю .Net) - person a_horse_with_no_name   schedule 07.02.2013