2012-11-03 157 views
0

晚上好,爲什麼我的if語句沒有被正確評估?

我正在使用下面的代碼截斷我的MySQL數據庫中的表。據我所知,查詢運行良好,表被截斷。但是,我用來測試行是否受到影響的if語句正在Else語句中進行評估。

那麼數據庫中的表如何被截斷 - 正如所料 - 但Else語句正在被評估 - 就像沒有行受到影響一樣?我究竟做錯了什麼?

下面的代碼:

Public Sub purgeCC() 
    Dim dbAdapter As New MySqlDataAdapter 
    Dim dbCmd As New MySqlCommand 


    Dim ConnectionString As String = String.Format("Server={0};Port={1};Uid={2};Password={3};Database=accounting", FormLogin.ComboBoxServerIP.SelectedItem, My.Settings.DB_Port, My.Settings.DB_UserID, My.Settings.DB_Password) 
    Dim myQuery As String = "TRUNCATE TABLE cc_master" 

    Using dbConn As New MySqlConnection(ConnectionString) 
     Using dbComm As New MySqlCommand() 
      With dbComm 
       .Connection = dbConn 
       .CommandType = CommandType.Text 
       .CommandText = myQuery 
      End With 

      Try 
       Dim affectedRow As Integer 
       dbConn.Open() 
       affectedRow = dbComm.ExecuteNonQuery() 
       If affectedRow > 0 Then 
        MsgBox("Credit Card Master table has been successfully purged!", MsgBoxStyle.Information, "DATABASE PURGED!") 
       Else 
        MsgBox("Credit Card Master table was not purged!", MsgBoxStyle.Critical, "ATTENTION") 
       End If 
      Catch ex As Exception 
       MessageBox.Show("A DATABASE ERROR HAS OCCURED" & vbCrLf & vbCrLf & ex.Message & vbCrLf & _ 
            vbCrLf + "Please report this to the IT/Systems Helpdesk at Ext 131.") 
      End Try 
      dbConn.Close() 
      dbComm.Dispose() 
     End Using 
    End Using 
End Sub 

回答

5

按照本文件http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html 將truncate命令可能不總是返回受影響的行如果DB版本比5.somthing更大,表沒有外鍵限制。如果你確實有FKs,那麼每行都會有一個刪除操作,你會得到你正在尋找的返回值,但是如果你不這樣做,那麼mysql將會丟棄並重新添加表(這會更快),這意味着它有沒有想法有多少記錄受到影響。

+0

謝謝弗蘭克。我開始閱讀文檔,但在發佈答案之前還沒有那麼久。再次感謝。 –

2

if聲明被正確評估,它只是affectedRow(這也許應該是由affectedRows的方式,但我只是迂腐那裏)沒有被設置爲你期望的那樣。

根據受影響的行數計算截斷值the online docs對於truncate table是不明智的。

在某些情況下,只有將其映射到delete(例如帶有InnoDB引擎的特定版本,因爲它們必須被檢查或級聯而存在外鍵約束)時纔是準確的。

對於其他引擎,您可能會得到0,因爲它會丟棄表並重新創建它。

如果您確實需要這些信息,請在截斷前後執行select count(*)。當然,after通常應該是零(除非截斷失敗)。

+0

謝謝,我通過閱讀文檔後意識到這一點。我將測試語句中的操作符更改爲(=),並且按預期工作。再次感謝。 –

相關問題