2015-11-16 79 views
-1

當我按我的更新按鈕時我得到mscorlib.dll中發生未處理的異常'System.FormatException'類型。我想更新我的數據庫值。只有手機號碼是您可以更新的值。mscorlib.dll在更新按鈕中出現'system.formatexception'類型的未處理的異常

This is the error message

Imports MySql.Data.MySqlClient 
Imports System.Data.Sql 
Imports System 
Imports System.Data 

Public Class AddStudent 
Dim connString As String = "server=localhost;userid=jared;password=jared;database=database;persistsecurityinfo=True" 
Dim SQLConnection As MySqlConnection = New MySqlConnection 
Dim student As New DataTable() 


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 


    Dim iReturn As Boolean 
    Using SQLConnection As New MySqlConnection(connString) 
     Using sqlCommand As New MySqlCommand() 
      With sqlCommand 
       .CommandText = "INSERT INTO students (StudentNumber, Firstname, Surname, Number) values (@sNumber,@sName,@sLname,@sNum)" 
       .CommandType = CommandType.Text 
       .Parameters.AddWithValue("@sNumber", TextBox1sn.Text) 
       .Parameters.AddWithValue("@sName", TextBox1name.Text) 
       .Parameters.AddWithValue("@sLname", TextBox2su.Text) 
       .Parameters.AddWithValue("@sNum", TextBox3num.Text) 

      End With 
      Try 
       SQLConnection.Open() 
       sqlCommand.ExecuteNonQuery() 
       iReturn = True 
      Catch ex As MySqlException 
       MsgBox(ex.Message.ToString) 
       iReturn = False 



      Finally 
       SQLConnection.Close() 
      End Try 
     End Using 
    End Using 
End Sub 

Public Function InsertStud() As Boolean 
    Dim iReturn As Boolean 
    Using SQLConnection As New MySqlConnection(connString) 
     Using sqlCommand As New MySqlCommand() 
      With sqlCommand 

       .CommandText = "INSERT INTO students (StudentNumber, Firstname, Surname, Number) values (@sNumber,@sName,@sLname,@sNum)" 
       .Connection = SQLConnection 
       .CommandType = CommandType.Text 
       .Parameters.AddWithValue("@sNumber", TextBox1sn.Text) 
       .Parameters.AddWithValue("@sName", TextBox1name.Text) 
       .Parameters.AddWithValue("@sLname", TextBox2su.Text) 
       .Parameters.AddWithValue("@sNum", TextBox3num.Text) 


      End With 
      Try 
       SQLConnection.Open() 
       sqlCommand.ExecuteNonQuery() 
       iReturn = True 
      Catch ex As MySqlException 
       MsgBox(ex.Message.ToString) 
       iReturn = False 


      Finally 
       SQLConnection.Close() 
      End Try 
     End Using 
    End Using 
    Return iReturn 
End Function 

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 



    Dim iReturn As Boolean 
    Using SQLConnection As New MySqlConnection(connString) 
     Using sqlCommand As New MySqlCommand() 
      With sqlCommand 
       .CommandText = "UPDATE students SET StudentNumber = @sNumber, " & TextBox1sn.Text & 
        "`Name`= @sName, [email protected], Number= @sNum, " & _ 
        "College= @sCollege, Course= " & _ 
        ("Where StudentNumber = @oldNumber") 
       .Connection = SQLConnection 
       .Parameters.AddWithValue("@sNumber", SqlDbType.VarChar).Value = TextBox1sn.Text 
       .Parameters.Add("@sName", MySqlDbType.VarChar).Value = TextBox1name.Text 
       .Parameters.Add("@sLname", MySqlDbType.VarChar).Value = TextBox2su.Text 
       .Parameters.Add("@sNum", MySqlDbType.VarChar).Value = TextBox3num.Text 
       .Parameters.AddWithValue("@oldNumber", SqlDbType.VarChar).Value = TextBox1sn.Text 


      End With 
      Try 
       SQLConnection.Open() 
       sqlCommand.ExecuteNonQuery() 
       iReturn = True 
      Catch ex As MySqlException 
       MsgBox(ex.Message.ToString) 
       iReturn = False 



      Finally 
       SQLConnection.Close() 
      End Try 
     End Using 
    End Using 
End Sub 
End Class 
+0

Dont concat SQL爲您的WHERE子句使用參數,就像您爲其他人所做的那樣; '姓名'是一個保留字,所以你必須逃避。否則,告訴我們錯誤發生的地方。年份是Db中的數字類型嗎? – Plutonix

+0

如果'StudentNumber'是一個自動增量ID,那麼您可能不想更新它。從SQL中刪除該部分,並使用'@ sNumber'作爲WHERE子句。如果它*是一個AI ID,它不會是文本/字符/字符串類型 – Plutonix

+0

@Plutonix你好。 StudentNumber不是自動增量ID。輸入的是隨機數。該錯誤發生在sqlCommand.ExecuteNonQuery()上。 – Redd

回答

1

你錯誤的原因是呼籲前4個參數AddWithValue。 AddWithValue第二個參數是要分配給參數的值,而不是其類型。 使用類型作爲第二個參數是指AddWithValue創建整數類型的參數,當您指定的字符串值屬性,你得到

你應該改變一切使用冗長,但更安全添加例外

With sqlCommand 
    .CommandText = "UPDATE students SET StudentNumber = @sNumber, " & _ 
        "`Name`= @sName, [email protected], Number= @sNum, " & _ 
        "College= @sCollege, Course= @sCourse, Year = @sYr " & _ 
        "Where StudentNumber = @oldNumber") 
    .Connection = SQLConnection 

    .Parameters.Add("@sNumber", SqlDbType.VarChar).Value = TextBox1sn.Text 
    .Parameters.Add("@sName", MySqlDbType.VarChar).Value = TextBox1name.Text 
    .Parameters.Add("@sLname", MySqlDbType.VarChar).Value = TextBox2su.Text 
    .Parameters.Add("@sNum", MySqlDbType.VarChar).Value = TextBox3num.Text 
    .Parameters.Add("@sCollege", ???).Value = ComboBox1.SelectedItem 
    .Parameters.Add("@sCourse", ???).Value = ComboBox2.SelectedItem 
    .Parameters.Add("@sYr", ???).Value = ComboBox3.SelectedItem 
    .Parameters.Add("@oldNumber, SqlDbType.VarChar).Value = ??? 

當然,已經有人告訴你,你需要使用的參數爲您的查詢的每一個部分,(也是在需要的參數)

還要注意,我已經改變了傳遞給Add方法來枚舉使用特定的MySql。 SqlDbType是用於基類的通用枚舉,我不確定它是否具有與MySql相同的值,那麼最好使用匹配的值。

最後的最後三個參數使用相同的方法,但我不知道什麼是預期MySQLDbType的,如果你需要組合的SelectedItem屬性

編輯
有轉換爲相應的數據類型也是Name作爲保留關鍵字的問題,將其置於反引號之間,並且不清楚您嘗試更新的內容。您在WHERE條件中使用Number。沒有必要使用也用於搜索的文本框的值更新同一記錄上的Number。相反,如果您嘗試使用新值更改Number字段,則需要在WHERE條件中使用原始值。

+1

看起來有趣,但我不能把我的手指放在什麼地方出錯 – Plutonix

+0

@Steve我試過你發佈的代碼。但仍然存在錯誤。 – Redd

+0

所以讓我們逐個檢查你的領域。數據庫表上它們的數據類型是什麼。我們是否爲每一個傳遞正確的參數類型?你可以添加列的數據類型嗎? – Steve

相關問題