Обновление таблиц с именами столбцов, содержащих символы @, используя OleDbCommandBuilder в C # - PullRequest
1 голос
/ 07 января 2011

Приветствую вас, великие товарищи;

Я пытаюсь использовать этот код для внесения изменений в базу данных SQL Server:

adapter = new OleDbDataAdapter(
    Db.GetRecordSql(table.Name, recordId), Db.Connection);
OleDbCommandBuilder cmd = new OleDbCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds);

Затем, при сохранении изменений, внесенных в DataRow:

adapter.Update(new DataRow[] { row });

Это работает именно так, как я хочу, чтобы это работало.Все операции с БД очень просты, и приложение поддерживает несколько форматов баз данных, поэтому этот метод подходит для этой задачи.

Моя проблема заключается в том, что этот метод завершается ошибкой, когда строка содержит столбец с @войдите в его имя.Схема базы данных использует префиксы имен столбцов со знаком @ для обозначения личных метаданных, таких как даты создания / изменения и контрольные суммы.

Когда имя столбца содержит знак @, метод Update вызываетOleDbException:

Должен объявлять скалярную переменную @ create

Отлично.И что теперь?

Серьезно, я погуглил эту штуку до смерти.Я знаю, что немного необычно включать символ @ в название столбца, но это рука, с которой мне раздали.

Есть идеи?Довольно пожалуйста?:)

1 Ответ

1 голос
/ 07 января 2011

Вы должны быть в состоянии указать символы QuotePrefix и QuoteSuffix в компоновщике команд:

cmd.QuotePrefix = "[";
cmd.QuoteSuffix = "]";

После этого созданная команда будет заключать в скобки все имена (столбцы и таблицы). И я предполагаю, что это само собой разумеется, но убедитесь, что используемые вами значения префиксов и суффиксов действительны для базовой базы данных. Например, для некоторых баз данных может потребоваться использовать двойные кавычки вместо скобок.

...