2016-05-19 12 views
0

my Table Screen shot私のエラーは、条件式のデータ型の不一致です

これは私のコードです:ありがとうございました。私のcommand.ExecuteReaderエラーでは、条件式のデータ型の不一致が示されます。

+0

入力を表のデータ型 –

+1

と同じに変換してください**最初の**では、最後のparameters.AddWithValueに '@'がありません。 ** 2番目の**では、Insert文に 'ExecuteReader'を使用しています。 'ExecuteNonQuery'を使うべきです。 ** Third **、[AddWithValueを使用しない](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) –

+0

@Chean Sanghaniは、AddWithValueよりも私を助けてくれてありがとう。 – Hackweiser

答えて

0
conn.Open() 
command.CommandText = "INSERT INTO [Physical]([PhysicalNo],[StockCode],[StockName],[SDate],[EditDate],[OnhandQty])" + 
         "VALUES(@PhysicalNo,@StockCode,@StockName,@SDate,@EditDate,@OnhandQty)" 

command.Parameters.AddWithValue("@PhysicalNo", txtPhysicalno.Text) 
command.Parameters.AddWithValue("@StockCode", cboStockCode.Text) 
command.Parameters.AddWithValue("@StockName", txtstockname.Text) 
command.Parameters.AddWithValue("@SDate", cboStockdate.Text) 
command.Parameters.AddWithValue("@EditDate", EditPicker.Text) 
command.Parameters.AddWithValue("OnhandQty", txtqty.Text) 

Dim read1 As OleDbDataReader = command.ExecuteReader 

While read1.Read 

End While 

conn.Close() 

data type mismatchエラーは、入力されたデータ型と一致されていないテーブル内の値を挿入することを意味します。

あなたの列の見出しから、数値データ型の値の場合はdate-timeデータ型を、数値データ型の値の場合はintデータ型を挿入する必要があると思います。

この回答が役に立たない場合は、テーブルデザインビューのスクリーンショットを提供してください。

+0

Harshil Shahは私のテーブルスクリーンショットをクリックしてください... – Hackweiser

+0

あなたの列データ型int、text、Date timeです。ここで私が見ているのは、テキスト型のデータ型だけを追加することです。だからあなたのテーブルのデータ型に応じてそれを変更してみてください –

+0

あなたは私を助けてくれてありがとうございます。 – Hackweiser

0

AddWithValueメソッドが正しく機能するためには、データベースの列に正しいデータ型の値を渡す必要があります。これは、SDateおよびEditDateカラムで最も明白に必要です。 SDATEため

例:

const DATEFORMAT As String = "dd.MM.yyyy";     
command.Parameters.AddWithValue("@SDate", _ 
       DateTime.ParseExact(cboStockdate.Text,DATEFORMAT, _ 
           System.Globalization.CultureInfo.InvariantCulture, _ 
           System.Globalization.DateTimeStyles.None)) 

明らか日付形式、のCultureInfoDateTimeStylesは、アプリケーションのコンテキスト内で適切なものに調整する必要があります。 TryParseメソッドも参照してください。

他の列では、SQLの実行中に自動的に変換が実行されますが、コマンドにパラメータを追加するときに明示的な変換を行うことをお勧めします。

パラメータを追加するさらに良い方法は、AddWithValueをまったく使用しないことです。 Addメソッドを使用して、パラメータのデータ型(データベース側)を明示的に指定することができます。

Dim par As OleDbParameter = new OleDbParameter("@SDate", OleDbType.Date) 
par.Value = DateTime.Parse(cboStockdate.Text) 
cmd.Parameters.Add(par) 

日時にテキスト入力がここでも適用される変換する(最初のコードサンプルのように)ParseExactを使用するより具体的なアプローチ。

+0

Phil私はそれを試していただきありがとうございます。 – Hackweiser

+0

PhilSがエラーを処理していないため、文字列が有効なDateTimeとして認識されませんでした。 – Hackweiser

+0

PhilS同じエラー文字列が有効なDateTimeとして認識されませんでした。あなたを助けてくれた。 – Hackweiser

関連する問題