c # проблема с датируемым первичным ключом - PullRequest
2 голосов
/ 20 мая 2010

Итак, у меня есть таблица в базе данных Oracle, которую я в основном пытаюсь реплицировать в C # вместе с ее первичным ключом. Я могу нормально загрузить таблицу, но затем, когда я пытаюсь добавить то же ограничение первичного ключа, что и таблица оракула, я получаю эту ошибку:

"These columns don't currently have unique values".

Вот код

DataTable dt = new DataTable(combine(owner, name));
string q = "select " + getColumnSelect(owner, name) + 
           " from " + combine(owner, name) + " " + 
           (where_clause ?? "") + " order by " + getOrderByKeys(owner, name);

// load the data table
OracleDataAdapter oda = new OracleDataAdapter(q, conn);
oda.FillLoadOption = LoadOption.PreserveChanges;
dt.BeginLoadData();
oda.Fill(dt);
dt.EndLoadData();

// now set primary keys
List<DataColumn> cols = new List<DataColumn>();
foreach (string key in getKeys(owner, name))
{
    cols.Add(dt.Columns[key]);
}


// This is where it fails
dt.PrimaryKey = cols.ToArray();

return dt;

Теперь, используя точно такой же оператор выбора. Если я добавлю первичный ключ в таблицу данных до того, как заполню его, он работает просто отлично. Я в тупике.

РЕДАКТИРОВАТЬ: я забыл добавить, что это работает с той же таблицей (разные данные, конечно) в другой базе данных. И я проверил, что данные в нерабочей базе данных уникальны.

Ответы [ 2 ]

5 голосов
/ 21 мая 2010

Проверьте пробелы, вот пример с уникальными значениями (но у одного есть пробел), который воссоздает проблему:

DataTable dt = new DataTable("Hello world");
dt.Columns.Add("Col1");
dt.Rows.Add("Val1");
dt.Rows.Add("Val1 ");
dt.Rows.Add("Val3");
List<DataColumn> cols = new List<DataColumn>();

cols.Add(dt.Columns["Col1"]); 

try
{
    dt.PrimaryKey = cols.ToArray();
}
catch (Exception e)
{
    // Throws "These columns don't currently have unique values"    
}
0 голосов
/ 20 мая 2010

Что возвращает getKeys(owner, name), если вы не добавили PK в базу данных?

Я собираюсь догадаться - ничего ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...