2013-04-12 1 views
2

SQL Server 데이터베이스에서 레코드를 삭제하려고하는 큰 프로그램이 있습니다.VB .NET SQL 삭제 쿼리가 작동하지 않습니다.

기본적으로
Dim dbConnection As SqlConnection 
Dim dbCommand As SqlCommand 
Dim strSQL As String 
Dim dgvSelectRow As Integer 'Represents the selected row in the DataGridView 

Public Sub SQLConnect() 
    dbConnection = New SqlConnection("Data Source=w7gbnewmfg2143\sqlexpress;Initial Catalog=master_plan;Integrated Security=True") 
    dbConnection.Open() 
End Sub 

Public Sub SQLCommand() 
    dbCommand = New SqlCommand(strSQL, dbConnection) 
End Sub 

Public Sub SQLDisconnect() 
    dbConnection.Close() 
End Sub 

Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click 
    If dgvLine1.RowCount = 0 Then 
     MsgBox("No Rows to Delete") 
    Else 

     dgvSelectRow = dgvLine1.CurrentRow.Index 

     If MsgBox("Are you sure to remove this job?", MsgBoxStyle.Critical + MsgBoxStyle.YesNo, "Remove Job") = MsgBoxResult.Yes Then 

      SQLConnect() 
      strSQL = "DELETE FROM [LinePlan] WHERE DateTime = '" & dgvLine1.Item(8, dgvSelectRow).Value & "'" 'Removes selected row from DataGridView at position column 8 
      SQLCommand() 
      dbCommand.ExecuteNonQuery() 
      SQLDisconnect() 
      tmrUpdate.Enabled = True 
      tmrUpdate.Start() 
     Else 

     End If 
    End If 
End Sub 

나는 기록을 삭제하는 것을 시도하고있다 : 나는 원래 지금이 내가 가지고있는 것입니다 그러나 내가 MS SQL 2008

를 사용하도록 전환하기로 결정했습니다, Microsoft Access에서 작업이 코드를 생성 DataGridView의 선택된 행에서 가져옵니다. 행에서 내 DGV에있는 열의 DateTime 값을 삭제합니다. 이제 MS Access에서이 쿼리를 만들었 더니 전혀 문제가 없었습니다. 완벽하게 작동했습니다. 이제는 MS SQL로 마이그레이션 했으므로 모든 종류의 문제가 있습니다. 나는 지금 내가 풀었던 문법 오류를 많이 겪고 있었다 (나는 생각한다). 예외를 잡기 위해 Catch를 사용하여 오류를 확인하려고했습니다. 이제 모든 오류를 해결했습니다. 이제 제거 단추를 클릭해도 오류가 발생하지 않지만 레코드가 삭제되지 않고 여전히 데이터베이스에 남아 있습니다. 이 프로그램은 오류를 표시하지 않거나 오류를 표시하지 않으며 필요한 작업을 수행 한 것처럼 보이지만 레코드를 삭제하지는 않습니다. 연결 문자열의 다른 방법을 사용해 보았지만 아무 소용이 없습니다. 변수를 사용하지 않고 수동으로 데이터를 입력하고 여전히 운이 없다는 것을 시도해 보았습니다.

나는 곧장 앞으로 뭔가를 놓치고 있습니까? 문제가 무엇인지 알 수 없기 때문입니다. 그것은 아주 똑 바른 앞으로 질문 및 많은 것이 진짜로 잘못 될 수 있었다는 것을 didnt를 보인다, 그러나 나가 얼마나 나쁜지 :).

도움이나 감사의 말씀을드립니다. 시간 내 줘서 고마워!

감사합니다, 제임스

+1

나는 당신의 SQL 명령 조건이 실현되지 않을 것 같아요. DateTime = 'dgvLine1.Item (8, gvSelectRow) .Value'또는 datetime의 형식이 전달 매개 변수와 일치하지 않을 수 있습니다. – Deepak

답변

2

지표화 된 쿼리

strSQL = "DELETE FROM [LinePlan] WHERE DateTime = @dtValue" 
SQLCommand() 
dbCommand.Parameters.AddWithValue("@dtValue", Convert.ToDateTime(dgvLine1.Item(8, dgvSelectRow).Value) 
dbCommand.ExecuteNonQuery() 

데이터베이스 엔진에 올바른 포맷 날짜 값을 전달하는 대신 전달하려고하는 일을두고 있기 때문에 더 나은 작업을해야으로 시도 문자열이 데이터베이스에 맞는 형식인지 확인하십시오.

... 다른 것을 잊어 버렸습니까? .... 아, 네, 키스 작별 Sql Injection

+0

내 문제를 정렬 해 주셔서 고맙습니다. 정말 고마워요. :) 내 지식을 높이기 위해 매개 변수를 살펴보십시오. 다시 한 번 감사드립니다! – James

관련 문제