【发布时间】:2016-12-12 11:23:13
【问题描述】:
我正在尝试从 SQL Server 获取列的以下详细信息:
- 尺寸
- 精度
- 规模
当我有以下表格架构时,我成功获取数据:
表 1:
Col1 : varchar(40),null)
Col2 : varchar(2,null)
Col3 : varchar(57,null)
Col4 : varchar(245 ,null)
Col5 : datetime(not null)
但是我遇到了一个错误
指定的转换无效。
如果是这种模式:
Col1 : varchar(34,null)
Col2 : varchar(1066,null)
Col3 : varchar(500,null)
Col4 : varchar(600,null)
Col5 : numeric(31,13,null)
Col6 : numeric(31,13,null)
Col7 : datetime(null)
代码:
String[] columnRestrictions = new String[4];
columnRestrictions[0] = 'MyDb';
columnRestrictions[1] = 'dbo';
columnRestrictions[2] = 'Employee';
using (SqlConnection con = new SqlConnection("MyConnectionString"))
{
con.Open();
var columns = con.GetSchema("Columns", columnRestrictions).AsEnumerable()
.Select
(
t => new
{
Name = t[3].ToString(),
Datatype = t.Field<string>("DATA_TYPE"),
IsNullable = t.Field<string>("is_nullable"),
Size = t.Field<int?>("character_maximum_length"),
NumericPrecision = t.Field<int?>("NUMERIC_PRECISION"), //error on this field
NumericScale = t.Field<int?>("NUMERIC_SCALE")
}).ToList();
来源:
更新:此行导致问题
NumericPrecision = t.Field<int?>("NUMERIC_PRECISION"), //error on this field
如何解决此错误并获取列的大小、精度和比例?
【问题讨论】:
-
那么哪一行抛出异常?您应该将其缩小到单个字段...
-
@JonSkeet:Name,Datatype,isnullable 正在工作,但我想问题出在其他属性上
-
您应该努力缩小范围,而不是猜测。找到一个肯定会导致问题的属性,最好在调试器中找出实际类型是什么。
-
在 sys.columns 中,
precision和scale是tinyint,映射到byte。您总是可以只查看基础值或列 def -GetSchema()返回一个DataTable,其中有.Columns["NUMERIC_PRECISION"].DataType -
@Learning 因为-1 是它用来表示
max的setinel 值
标签: c# .net sql-server linq ado.net