У меня есть столбец в моей Microsoft SQL CE 3.5 SP2 базе данных с именем Тип , который должен хранить один символ.
Для этого яотформатировал столбец как nchar(1)
, и хранение данных работает нормально.
Тем не менее, всякий раз, когда я пытаюсь заполнить DataTable
, используя Visual Studio 2010 , Type значения столбца хранятся в виде string values.
Это действительно вызывает хаос, только когда я пытаюсь использовать один из методов нашей компании, чтобы проверить, изменилась ли данная строка данных.Значение, хранящееся в памяти (символ), равно никогда и равно значению, считанному из базы данных (поскольку это другой тип данных).
Вместо того, чтобы писать специальную процедуру, которая проверяетв каждом столбце, чтобы увидеть, является ли это тип данных char
и приведение, существует ли другой тип данных SQL , который я должен назначить для столбца таблицы?
Список доступныхСтолбцы выглядят как {bigint, двоичный, битный, datetime, float, image, int, money, nchar, ntext, numeric, nvarchar, real, rowversion, smallint, tinyint, uniqueidentifier, varbinary}.
Решено
Чтобы определить, изменились ли мои данные In Memory
из таблицы SQL CE, я использовал следующую процедуру:
// Class RowData
// private List<CellData> cellList;
public bool Changed(DataTable table) {
int index = RowIndex(table);
if (-1 < index) {
DataRow row = table.Rows[index];
foreach (DataColumn col in table.Columns) {
if (!String.IsNullOrEmpty(col.ColumnName)) {
bool found = false;
foreach (var cell in cellList) {
if (cell.ColumnName == col.ColumnName) {
object o = row[cell.ColumnName];
if (col.DataType != typeof(string)) {
if (!cell.Value.Equals(o)) {
return true; // this fails on a Char.value 'C' != "C"
}
} else if (col.MaxLength != 1) {
if (!cell.Value.Equals(o)) {
return true; // this fails on a Char.value 'C' != "C"
}
} else {
string str = o.ToString();
if (!cell.Value.Equals(str[0])) {
return true;
}
}
found = true;
}
if (found) {
break;
}
}
}
}
return false;
}
return true;
}
Не стесняйтесь критиковать что-либо в моем коде.Я ненавижу слышать, что не делаю что-то лучше, но это всегда стимулирует рост моих способностей.