2017-05-09 319 views
3

私の手に.Netの謎があります。 .Netデータ型は、型 '' 'System.String'の型にオブジェクトをキャストできません。

我々は、このエラーを引き起こしMSSQLデータベーステーブルのみint型および様々な長さのNULL可能NVARCHAR列を含ま

---> 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) 

次のスタックトレースを受けました。

テーブルには、DBNullと文字列値の両方が含まれています。

最初の型の名前が空文字列として表示されるInvalidCastExceptionをトリガーすることはできません。 ' dbクエリが返す可能性のあるすべての型を試しました。

  • はDBNull
  • int型
  • int型?
  • たSqlString

我々は常に我々はそれが不正な形式のメッセージを表示して、独自のInvalidCasetExceptionを構築疑うIsMaxLengthViolatedコードを逆コンパイルだけで、通常のキャストを見つけ

InvalidCastExceptionが正しい型名を受け取る

if (obj != null && obj != DBNull.Value && ((string) obj).Length > this.MaxLength) 

このメッセージは、.NETフレームワークによって一見生成されました。

このような不正なInvalidCastExceptionをトリガーする既知の方法はありますか?

+0

あなたがすでに考えていれば申し訳ありませんが、文字列にcharをキャストしようとしているようです。 –

+0

あなたはデータベースにアクセスできますか?明らかに、.Netは文字列にキャストできず、その型を判別できないというデータテーブルの値です。たぶんあなたが見つけることができるすべての価値を研究するなら、どちらがあるか。とにかく、実際には本当に奇妙です – Pikoh

答えて

-1

この質問はすでに次のリンクをご覧掲載されて

if (obj != null && obj != DBNull.Value && (Convert.ToString(obj)).Length > this.MaxLength) 

UPDATE

この

if (obj != null && obj != DBNull.Value && ((string) obj).Length > this.MaxLength) 

を交換してください: [InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.]

回答GIVを上記のリンクにはtoStringをobjで行うが、ベストプラクティスはnull例外を処理するConvert.Tostring()である。

これがあなたの問題を解決することを願っています。

+0

そのコードは[.Net frameworkの一部です](http://www.dotnetframework.org/default.aspx/[email protected]/[email protected]/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/Data/System/Data/DataColumn @ cs/1305376/DataColumn @ cs)。私はOPが何かを変更したいとは思わない。 – Pikoh

+0

http://stackoverflow.com/questions/21216641/invalidcastexception-unable-to-cast-object-of-type-system-dbnull-to-type-sy –

+0

いいリンク。 .NETフレームワークのソースコードをどうやって変えることができますか? – Pikoh

関連する問題