2016-07-14 30 views
0

Linateの初心者であるため、フィルタリングによってDatatableをDataviewに変換するとき、Datasetに詳細をフェッチするためにSQLデータベースを照会しました。エラー。タイプ 'System.Byte'のオブジェクトを型 'System.String'にキャストすることができません

コード:

DataView cktDv = (from clounceform in dsclounceForms.Tables["Table2"].AsEnumerable() 
             where clounceform.Field<string>("Form_FileType_ID").Equals("5") 
             select clounceform).CopyToDataTable().AsDataView(); 

例外は私がInfactはintへの文字列の鋳造を変更し、int型にキャストしようとしたときに私に より多くの誤解を招くされたさまざまなエラーを与え、さらに進んでcouldntの

Unable to cast object of type 'System.Byte' to type 'System.String'. 
System.Data.DataSetExtensions 
at System.Data.DataRowExtensions.UnboxT`1.ReferenceField(Object value) 
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 
at ClounceFormsSuite.Design.CreateFormDesign.<>c.<CreateForm>b__12_0(DataRow bounceform) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 115 
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() 
at System.Data.DataTableExtensions.LoadTableFromEnumerable[T](IEnumerable`1 source, DataTable table, Nullable`1 options, FillErrorEventHandler errorHandler) 
at System.Data.DataTableExtensions.CopyToDataTable[T](IEnumerable`1 source) 
at ClounceFormsSuite.Design.CreateFormDesign.CreateForm(String[] cktFileContent, String filePath, String formID) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 114 
at ClounceFormsSuite.Design.CreateFormDesign.UserControl_Loaded(Object sender, RoutedEventArgs e) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 70 

です

DataView cktDataView = (from clounceform in dsclounceForms.Tables["Table2"].AsEnumerable() 
             where clounceform.Field<int>("Form_FileType_ID") == 5 
             select clounceform).CopyToDataTable().AsDataView(); 

エラー:

Specified cast is not valid. 
+0

多分これが役立ちます。 http://stackoverflow.com/questions/1003275/how-to-convert-byte-to-string – ViVi

+0

あなたのデータベースにはどのデータ型が 'Form_FileType_ID'ですか? – lokusking

+0

それはintデータ型である –

答えて

4

データはbyte、ないstringなくintあります。したがって、あなたがField<byte>(...)を使用する必要があります。

私は、これは動作します疑う:

where clounceform.Field<byte>("Form_FileType_ID") == (byte)5 
+0

それは働いたが、それは私がそれをキャストするときに変換されていないintデータ型であることがなぜ機能していない。 –

+2

@ArulManivannan **は** intではないためです。あなたは物事を彼らがないものにunboxすることはできません。 –

+1

@ArulManivannan:なぜこれが混乱しているのか分かります。なぜint i = 5であるのかは分かりません。バイトb =(バイト)i; 'は合法ですが、'オブジェクトi = 5;バイトb =(バイト)i;はそうではありません。あなたが欠けているのは、キャスト演算子が非常に異なる2つの演算に対して1つの構文を使用していることです。 Eric Lippertの記事[Representation and identity](https://ericlippert.com/2009/03/03/representation-and-identity/)は、この区別を説明する優れた仕事をしています。 – Brian

関連する問題