C# 什么.Net数据类型可以触发类型为';的无法强制转换对象';输入';System.String';
我手上有一个.Net迷 我们收到了以下堆栈跟踪C# 什么.Net数据类型可以触发类型为';的无法强制转换对象';输入';System.String';,c#,sql-server,C#,Sql Server,我手上有一个.Net迷 我们收到了以下堆栈跟踪 ---> System.InvalidCastException: Unable to cast object of type '' to type 'System.String'. at System.Data.DataColumn.IsMaxLengthViolated() at System.Data.DataTable.EnableConstraints() at System.Data.DataTable.EndL
---> System.InvalidCastException: Unable to cast object of type '' to type 'System.String'.
at System.Data.DataColumn.IsMaxLengthViolated()
at System.Data.DataTable.EnableConstraints()
at System.Data.DataTable.EndLoadData()
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
触发此错误的MSSQL数据库表仅包含不同长度的ints和可为空的nvarchar列
该表包含DBNulls和字符串值
无论我们尝试什么,都无法触发InvalidCastException,其中第一个类型的名称显示为空字符串“”
我们尝试了db查询可能返回的每种类型
- DBNull
- int
- 智力
- SqlString
if (obj != null && obj != DBNull.Value && ((string) obj).Length > this.MaxLength)
此消息似乎是由.Net framework生成的
是否有任何已知的方法可以触发我们缺少的格式错误的InvalidCastException?替换此
if (obj != null && obj != DBNull.Value && ((string) obj).Length > this.MaxLength)
与
更新
此问题已发布,请访问以下链接:
上面链接中给出的答案是使用obj执行toString,但最佳实践是Convert.toString()来处理null异常
我希望这能解决您的问题。如果您已经考虑过,我很抱歉,但在我看来,这似乎是试图将字符转换为字符串。您有访问数据库的权限吗?因为显然是datatable中的一个值,.Net无法转换为字符串,也无法确定其类型。也许如果你研究所有的价值观,你会发现哪一个是正确的。不管怎样,这段代码真的很奇怪。我认为OP不想修改任何链接。您能告诉我如何在.Net Framework源代码中更改它吗?这个问题不能与DBNull相关,因为InvalidCastException将包括InvalidCast中的from类型为'System.DBNull',并且if语句包括针对DBNull的保护。不知何故,我们从数据读取器接收到一个没有类型名的对象。我们正在努力弄清楚这是怎么发生的。
if (obj != null && obj != DBNull.Value && (Convert.ToString(obj)).Length > this.MaxLength)