Привет Я подключаюсь к базе данных postgres и передаю данные на свой локальный компьютер.NpgsqlDataReader Select statement- Не работает для данных camelCase Таблицы
вот мой код:
public DataTable GetDataTable(string sql)
{
var conn = GetOpenConnection();
var dt = new DataTable();
var cmd = conn.CreateCommand();
cmd.CommandText = sql;
NpgsqlDataReader dr = null;
try
{
dr = cmd.ExecuteReader();
dt.Load(dr);
}
catch (Exception ex)
{
Log.Info(ex);
throw;
}
finally
{
dr.Close();
conn.Close();
}
return dt;
}
Ниже сценариев работает нормально
SQL = "SELECT * FROM test_db"
SQL = "SELECT * FROM TESTDB"
Но если ; SQL = "SELECT * FROM TestDB", то я получил исключение
Error 42P01 "TESTDB" не существует
Я заметил, что несколько таблиц. Если я использую имена таблиц данных на камне, каждый раз, когда он выдает исключение. Вот код, который я получил свое исключение
dr = cmd.ExecuteReader();
Так что я хотел бы знать, не могу ли я позвонить в таблицы camelCase? Какое лучшее решение для этого?
оцените ваши отзывы и ответы! Спасибо
Но ваши таблицы написаны в нижнем регистре или у вас есть их в смешанном случае? Я мог ошибаться, но, похоже, это более чувствительная к регистру PostGre, которая не позволяет создавать смешанные имена и требует, чтобы имя таблицы было точно в одном и том же случае. – Steve
@Steve: стандарт SQL указывает, что некотируемые идентификаторы складываются в верхний регистр, PostgreSQL сворачивает их в нижний регистр. Эта разница редко имеет значение, поскольку оба они нормализуют случай некотируемых идентификаторов. Если вам нужны идентификаторы, чувствительные к регистру, тогда SQL говорит, что вам нужно их удвоить. Некоторые базы данных используют обратные ссылки для цитирования идентификаторов, некоторые используют скобки, но PostgreSQL и стандартный SQL используют двойные кавычки. –
Это дублирует множество вопросов (ищите «[postgresql] регистратор, чувствительный к регистру», и вы найдете некоторые из них). –