检查数据集的空值
问题描述:
我想检查我的所有数据集为空值并替换它们。 为了做到这一点我写了这个代码:检查数据集的空值
public static DataSet Validator(DataSet dataSet)
{
foreach (DataTable dataTable in dataSet.Tables)
foreach (DataRow dataRow in dataTable.Rows)
foreach (DataColumn dataDataColumn in dataTable.Columns)
if (dataRow[dataDataColumn] == DBNull.Value)
{
if (dataRow[dataDataColumn].GetType() == typeof(string))
dataRow[dataDataColumn] = "";
else if (dataRow[dataDataColumn].GetType() == typeof(DateTime))
dataRow[dataDataColumn] = DateTime.MinValue;
else if (dataRow[dataDataColumn].GetType() == typeof(int) ||
dataRow[dataDataColumn].GetType() == typeof(short) ||
dataRow[dataDataColumn].GetType() == typeof(long) ||
dataRow[dataDataColumn].GetType() == typeof(float) ||
dataRow[dataDataColumn].GetType() == typeof(byte) ||
dataRow[dataDataColumn].GetType() == typeof(double))
dataRow[dataDataColumn] = 0;
}
return dataSet;
}
,但它不工作!哪里有问题? ,如果有更好的方法,我真的很感激,让我知道。 谢谢。
UPDATE 但它不工作!数据集中仍然有空值。
答
如前所述当您运行
dataRow[dataDataColumn].GetType()
你的dataRow[dataDataColumn]
的价值,这始终是DBNull.value
叫GetType()
。所以你总是得到类型DBNull
。
而是检查dataDataColumn.DataType
,它将返回列的实际数据类型。
您可以使用类似:
public static DataSet Validator(DataSet dataSet)
{
foreach (DataTable dataTable in dataSet.Tables)
foreach (DataRow dataRow in dataTable.Rows)
foreach (DataColumn dataDataColumn in dataTable.Columns)
if (dataRow.IsNull(dataDataColumn))
dataRow[dataDataColumn] = GetDefaultValue(dataDataColumn.DataType);
return dataSet;
}
static object GetDefaultValue(Type t)
{
// get the default value for value types
if (t.IsValueType)
return Activator.CreateInstance(t);
// in case of a string, we want an empty one instead of null
if (t == typeof(string))
return String.Empty;
return null;
}
答
您正在使用DBNull.Value检查空值,请尝试对Null进行测试。
有DBNull.Value与空之间的区别就在这里What is the difference between null and System.DBNull.Value?
什么不起作用?有没有例外? –
“不起作用”不是有用的错误报告。它不会编译?运行它时会抛出异常吗?它是否留下空位?它是否将事物设置为“42”而不是您想要的值?提供更多细节,你更有可能获得帮助。 – Chris
究竟哪些方法无效? –