2016-11-08 3 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 
     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()을 사용하여 쿼리를 실행합니다.
코드는 시도 ... 오류없이 실행되지만 레코드는 업데이트되지 않습니다. 나는 모든 이름, 맞춤법, 연결을 두 번 확인했지만 아직 업데이트가 이루어지지 않았습니다. 어떤 아이디어 나 제안도 환영합니다 !!

편집
나는 데이터 타입 불일치 오류를 얻을 위에서 아래로이 줄을 이동하는 경우 :

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

어떻게 업데이트가 작동하지 않는지 확인합니까? | DataDirectory |를 사용 했습니까? 당신의 연결 고리에있는 지름길? – Steve

+0

데이터베이스에 직접 가서 확인하실 수 있습니다. – user3795810

+1

데이터베이스를 프로파일 링하여 해당 명령문이 예상되는 데이터베이스에 도달했는지 확인하고, 그렇다면 스크립트가 정상적으로 표시되는지 확인하십시오. 또한 프로파일 링 된 쿼리를 SSMS에서 직접 실행하여 실제로 쿼리가 행을 업데이트하는지 확인하려고 했습니까? – Kritner

답변

3

있습니다 다양한 문제 :

업데이트 없음을

진행 상황을 알 수있는 코드가 충분하지 않습니다 (l 어쩌면 비어 Catch). 공급자가 성공했을 경우이 당신을 말할 것이다 :

Dim rows = updateCmd.ExecuteNonQuery() 

을가 비 제로의 경우는, 업데이 트를했다. 변경 사항을 볼 수없고 DB가 프로젝트의 일부인 경우 잘못된 DB 복사본을 볼 수 있습니다. (이름이 어쩌면 고든 리노 프 또는 고드 톰슨 ... 나 스티브가 아닌 경우) Why saving changes to a database fails?

데이터 유형 불일치가

AddWithValue를 사용하지 마십시오 참조하십시오. - 데이터 불일치입니다 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, 
        "") 

에만 true 또는 false 부분이 실행되도록 "새로운"If 운영자가 단락되어

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