我需要在 C# 中的 DataTable
中获取列的确切类型。
在 simliar article on SO我找到了部分解决方案:
DataTable st = reader.GetSchemaTable();
foreach (DataRow row in st.Rows)
{
Console.Write(string.Format("ColumnName:{0} DataType:{1} Ordinal:{2} Precision:{3} Size:{4} Scale:{5}",
row["ColumnName"], row["DataTypeName"], row["ColumnOrdinal"],
row["NumericPrecision"], row["ColumnSize"], row["NumericScale"]));
}
到目前为止,这适用于字符串和日期。
但对于小数,我总是收到 null
的精度和小数位数。
我需要这些值来在另一个数据库中创建一个新表。
返回的DataType
是Decimal
。
在 MSDN 文档中说,如果 NumericPrecision 不是数字数据类型,则返回 null,但小数是一种数字?
那么如何从 DataSet 中获取小数值的精确精度呢?或者更确切地说,我做错了什么?
编辑:
我正在尝试基于来自 FoxPro 应用程序的旧 .dbf 文件创建一些新的 SQL 数据库。 所以我想读取列,并在 SQL 中创建它们,因此我需要列的确切类型。
我尝试使用 .dbf 和一个新的 sql 数据库。 我在两者中都创建了一个表以确保知道确切的类型,对于这两个数据库我都得到了那些 null 返回值。只有十进制/数字值有问题,对于字符串和日期时间,我得到了大小。 对于 .dbf,我使用 OleDbConnection。 对于我使用 SqlConnection 的 SQL,如果我对每个都尝试它,我会得到 null。
最佳答案
根据我使用 MySQL 的经验,小数数据类型是数字,但它可以保持任何精度或小数位数。如果您尝试创建的数据库没有小数数据类型,您可能需要将其转换为不同类型的数字,并且可能需要猜测您需要的精度和小数位数。
关于c# - 如何从 DataTable 获取小数的 NumericPrecision 和 Scale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35868375/