2016-11-08 4 views
1

フォームに入力されたデータからテーブルを更新しようとしています。値のすべてがこのように構成されているSQLの更新、エラーなし、更新なし

_JEBatchDate = IIf(Me.textJEBatchDate.Text.Trim.Length > 0, Me.textJEBatchDate.Text.Trim, "") 

更新SQLは次のようになります...

UPDATE [MAIN] SET [CheckNumber] = @checknumber, [CheckDate] = @checkdate, [CheckCashDate] = @checkcashdate, [CheckAmount] = @checkamount, [PayeeNumber] = @payeenumber, [AccountNumber] = @accountnumber, [Bank] = @bank, [ToTheOrderOf] = @totheorderof, [CheckType] = @checktype, [DatePaperworkSentToPayee] = @datepaperworksenttopayee, [DatePaperworkSentToBank] = @datepaperworksenttobank, [IncompleteReason] = @incompletereason, [RejectReason] = @rejectreason, [CaseNumber] = @casenumber, [BankStatus] = @bankstatus, [CorrWithPayee] = @corrwithpayee, [Comments] = @comments, [BankCredit] = @bankcredit, [Refund] = @refund, [DateFundsRecdFromBank] = @datefundsrecdfrombank, [DateRefundRecd] = @daterefunded, [DateTargetSent] = @datetargetsent, [NumberOfTargets] = @numberoftargets, [DateCreditPostedToCLI] = @datecreditpostedtocli, [DateSentToSGForRepayment] = @datesenttosgforrepayment, [DateClaimWasRepaid] = @dateclaimwasrepaid, [NewCheckNumber] = @newchecknumber, [NewCheckAmount] = @newcheckamount, [ARCHIVED] = @archived, [JEBatchName] = @jebatchname, [JEBatchDate] = @jebatchdate WHERE [ID] = @ID; 


変数は、このようなフォームから引っ張られます
strValues = strValues & "[JEBatchDate] = @jebatchdate " 

Try ... Catch内で、パラメータは次のように構成されます。

Try 
     Using updateCmd As New OleDb.OleDbCommand(UpdateSQL, HMOConnection) 
      updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text) 
      updateCmd.Parameters.AddWithValue("@checknumber", _checkNumber) 
      updateCmd.Parameters.AddWithValue("@checkdate", _checkDate) 

私はupdateCmd.ExecuteNonQuery()を使用してクエリを実行します。
コードはTry ... Catchエラーなしで実行されますが、レコードは更新されません。私はすべての名前、綴り、接続をダブルチェックしましたが、まだ更新は行われていません。どんなアイデアや提案も感謝しています!

EDIT
私は上から下に次の行を移動した場合、私はデータ型の不一致エラーを取得:

updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text) 
+0

どのようにして、更新が動作しないことを確認していますか? | DataDirectory |を使用しましたか?あなたの接続紐のショートカット? – Steve

+0

私は直接データベースに入り、チェックすることができます。 – user3795810

+1

データベースをプロファイリングして、それが期待していたデータベースに文がぶつかっているのを確認してください。さらに、SSMSでプロファイリングされたクエリを直接実行して、クエリが実際に行を更新することを確認しましたか? – Kritner

答えて

3

様々な問題があります。

アップデートがありませんが、

何が起きているかを知るための十分なコードがありません(lおそらく空のCatch)。

Dim rows = updateCmd.ExecuteNonQuery() 

を、それが非ゼロであれば、それ更新をした:プロバイダーが成功した場合、これはあなたを教えてくれます。変更が表示されず、DBがプロジェクトの一部である場合は、間違ったDBコピーがある可能性があります。 (あなたの名前はゴードン・リノフまたはゴードトンプソン...または多分スティーブでない限り)今までAddWithValueを使用しないでくださいWhy saving changes to a database fails?

データ型の不一致に

を参照してください。 - データの不一致であるID列が整数である

updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text) 

場合は、文字列を渡している:これは、データに基づいてデータ型を想定して、プロバイダの原因となります。物事は非常に間違っている、他のDBで非常に間違っていることができますAdd使用:

updateCmd.Parameters.Add("@ID", OleDbType.Integer).Value = Convert.ToInt32(labelID.Text) 

I made sure all of the parameters were correct, matching the parameter name with the variable.

次に、のOleDBは、として名前付きパラメータを使用していません - あなたは、彼らがSQLに表示される正確な順序でそれぞれを指定する必要があります。あなたのSQL:

UPDATE [MAIN] SET [CheckNumber] = @checknumber, 
     [CheckDate] = @checkdate, 
     [CheckCashDate] = @checkcashdate,... 

しかし、あなたはその順番でパラメータを指定いけない:

updateCmd.Parameters.AddWithValue("@ID", Me.labelID.Text) 
updateCmd.Parameters.AddWithValue("@checknumber", _checkNumber) 
updateCmd.Parameters.AddWithValue("@checkdate", _checkDate) 

IIFを使用しないでください、それはSQLの最後に表示されますので、@IDが最後でなければなりません

_JEBatchDate = IIf(textJEBatchDate.Text.Trim.Length > 0, 
        textJEBatchDate.Text.Trim, 
        "") 

唯一の真または偽の一部が実行されるように、「新しい」Ifオペレータが短絡されています

_JEBatchDate = If(textJEBatchDate.Text.Trim.Length > 0, 
         textJEBatchDate.Text.Trim, 
         "") 
関連する問題