2016-09-19 5 views
1

先行ゼロをスティックするのは苦労しています。SQLiteプリペイドステートメントで先行ゼロを保持していません

私はこのようになりますプリペアドステートメントを持っている:多くの場合、ゼロをリードしている問題の

SQLiteCommand insertSQL = new SQLiteCommand(@"INSERT INTO Inventory(
      AssetTag, Vendor, Device, Attribute, DeviceType, System, Location, OnLoan, Notes, LastModifiedTime, LastModifiedPerson, IsDeleted) 
      VALUES (@AssetTagParam, @VendorParam, @DeviceParam, @AttributeParam, @DeviceTypeParam, @SystemParam, @LocationParam, @OnLoanParam, @NotesParam, @LastModifiedTimeParam, @LastModifiedPersonParam, @IsDeletedParam)", conn); 

フィールドには、「システム」です。この行で構築されています:

var SystemParam = new SQLiteParameter("@SystemParam", System.Data.DbType.String) { Value = item.System }; 

私はItem.Systemから引くテキストボックスに「0159」を入力した場合、私はItem.Systemが実際に一度「0159」の値を保持しないことを確認した実行時にSQL文が準備されていることを確認します。これは私がタイプと思うように、私はそれをDBのSystem.Data.DbType.Stringにキャストしようとしています。 SQLiteStudioで直接DBにデータを入力すると、先行ゼロが保持されます。

ここからどこに行くのかわかりません。 System.Data.DbTypeには、私が試してみたいテキストの抽象度の高い別の型はありません。私は本当にここからどこに行くのか分からない。私はここで私の先頭のゼロを保存することができますか?

編集:DB側にタイプ解明

var AssetTagParam = new SQLiteParameter("@AssetTagParam", System.Data.DbType.Int32) { Value = item.AssetTag }; 
var VendorParam = new SQLiteParameter("@VendorParam", System.Data.DbType.String) { Value = item.Vendor }; 
var DeviceParam = new SQLiteParameter("@DeviceParam", System.Data.DbType.String) { Value = item.Device }; 
var AttributeParam = new SQLiteParameter("@AttributeParam", System.Data.DbType.String) { Value = item.Attribute }; 
var DeviceTypeParam = new SQLiteParameter("@DeviceTypeParam", System.Data.DbType.String) { Value = item.DeviceType }; 
var SystemParam = new SQLiteParameter("@SystemParam", System.Data.DbType.String) { Value = item.System }; 
var LocationParam = new SQLiteParameter("@LocationParam", System.Data.DbType.String) { Value = item.Location }; 
var OnLoanParam = new SQLiteParameter("@OnLoanParam", System.Data.DbType.Boolean) { Value = item.OnLoan }; 
var NotesParam = new SQLiteParameter("@NotesParam", System.Data.DbType.String) { Value = item.Notes }; 
var LastModifiedTimeParam = new SQLiteParameter("@LastModifiedTimeParam", System.Data.DbType.String) { Value = item.LastModifiedTime }; 
var LastModifiedPersonParam = new SQLiteParameter("@LastModifiedPersonParam", System.Data.DbType.String) { Value = item.LastModifiedPerson }; 
var IsDeletedParam = new SQLiteParameter("@IsDeletedParam", System.Data.DbType.Boolean) { Value = item.IsDeleted }; 

、すべてのフィールドがINTSありASSETTAGとAssetID、除く型STRINGです。 OnLoanとIsDeletedはブーレーンです。

+1

テーブル内のフィールドのデータ型を知っておくと便利です。 – STLDeveloper

+0

もちろん!私は元のコメントにprepブロック全体を追加し、DB側でそのタイプを明確にしました。 – mkautzm

+1

"DB側では、すべてのフィールドがSTRING型です" SQLには "STRING"データ型がありません。あなたはTEXTを意味しますか? BOOLEANのデータ型は存在しません。http://sqlite.org/datatype3.html – leonbloy

答えて

1

this threadに記載されている同じトラップに該当する可能性があります。

簡単に言えば、「親和性のほんの一握り、逆にほとんどのデータベースに、SQLiteのは、列の型を持っていない、ということを覚えて(NUMERICaffinityを」SQLiteは「STRING」のデータ型を理解していない、その場合には、デフォルトを想定します')。

テーブルを正しい( "TEXT")指定子で再作成してください。

+0

これは機能します。フィールドの種類をSTRINGからTEXTに変更すると、問題が解決します。 – mkautzm

関連する問題