Datatable.Load не работает с SqlCeReader

У меня есть этот метод:

public static DataTable ExecuteDataTable(IDbConnection connection, string cmdText)
{
    IDbCommand command = connection.CreateCommand();
    command.CommandText = cmdText;
    command.CommandType = CommandType.Text;
    IDataReader reader = command.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(reader);
    return dt;
}

Когда я выполняю запрос select * from information_schema.Tables для соединения типа SQLConnection, все работает. Однако, когда я пытаюсь запустить его для соединения типа SqlCEConnection, строка dt.Load(reader) вызывает исключение:

System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

person amaters    schedule 08.03.2012    source источник
comment
Вы всегда можете заглянуть в DataTable, чтобы узнать, что вызвало ConstraintException. Установите точку останова прямо в строке dt.Load(reader);. Используйте окно быстрого просмотра, чтобы выполнить эту строку. Затем вы можете получить все строки с ошибками с помощью dt.GetErrors(). Затем вы можете просмотреть каждый возвращенный DataRow RowError свойство, чтобы увидеть фактическую причину.   -  person Tim Schmelter    schedule 08.03.2012
comment
Спасибо за подсказку по методу GetErrors(). Я получаю это: RowError: Столбец «DATE_MODIFIED» не допускает DBNull.Value. SqlCE, кажется, возвращает несколько больше столбцов, чем SQL Server 2005, но оставляет их в NULL.   -  person amaters    schedule 09.03.2012


Ответы (1)


Конечно, странная проблема, но вот альтернатива:

Считайте данные в DataSet и задайте для EnforceConstraints значение false. Затем вы можете вернуть DataSet.Tables[0]

person Icarus    schedule 08.03.2012
comment
Спасибо. Теперь я использую набор данных в сочетании с EnforceConstraints=false, который мне подходит. - person amaters; 09.03.2012