изменение типа нулевого столбца - PullRequest
1 голос
/ 29 февраля 2012

Я получаю данные из моей БД с одним пустым столбцом.По умолчанию тип данных - Int32.Если я изменяю тип данных, как показано ниже, он говорит:

Невозможно изменить тип данных столбца, если он содержит данные

_object.datatable.Columns[coll].DataType = typeof (decimal);

Есть ли способ получить столбецдесятичный или изменить тип данных в коде?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я наткнулся на это несколько раз.

У вас есть три варианта.

  1. Создайте столбцы самостоятельно

    var table = new DataTable();
    table.Columns.Add("id", typeof(int));
    table.Columns.Add("col1", typeof(decimal));
    
    DataAdapter.Fill(table);
    

если вы используете DataAdapter или DataReader для заполнения таблицы, столбцы создаются автоматически, только если вы не сделали это самостоятельно до

  1. Если вам нужен другой тип данных для отношения, просто добавьте столбец выражения

    table.Columns.Add("col1_decimal", typeof(decimal), "col1");
    

этот столбец будет доступен только для чтения, но будет работать для отношений.

  1. Добавить еще один столбец, скопировать данные, удалить первый столбец, переименовать новый

    table.Columns.Add("tmp", typeof(decimal));
    
    foreach(var row in table.Rows())
        row["tmp"] = row["col1"];
    
    table.Columns.Remove(table.Columns["col1"]);
    table.Columns["tmp"].ColumnName = "col1";
    

это может быть узким местом производительности для многих строк.

0 голосов
/ 29 февраля 2012

Вы не можете автоматически преобразовать весь столбец в новый тип данных.

Вы можете преобразовать определенное значение, когда его прочитаете:

decimal dec = (decimal)(int)_object.datatable[rownum][col1];

Примечание: если реальное значение - Int32, вам нужно распаковать его, приведя к int, прежде чем вы сможете привести к десятичному.

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