2013-01-15 56 views
1

編程新手,請儘量協助! 最近,IM負責使用C#& MS訪問來完成一個CRUD窗體窗體應用程序。在Windows窗體中更新CRUD的函數時出錯

在我的更新功能,我面臨以下錯誤之一,我不知道爲什麼.. 我的數據也無法更新。

錯誤:ArgumentException了未處理

Input string was not in a correct format.Couldn't store in staff_id Column. Expected type is Int32.

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using AcuzioSapp.AcuzioSecureStore_DatabaseDataSetTableAdapters; 

namespace AcuzioSapp 
{ 
    public partial class Update_Client : Form 
    { 
     private DataRow row; 
     private ClientTableAdapter adapter; 
     public Update_Client(DataRow row, ClientTableAdapter adapter) 
     { 
      InitializeComponent(); 
      this.row = row; 
      this.adapter = adapter; 
      textBox_id1.Text = Convert.ToString(row["c_id"]); 
      textBox_name1.Text = Convert.ToString(row["c_name"]); 
      textBox_address1.Text = Convert.ToString(row["c_address"]); 
      textBox_cinfo1.Text = Convert.ToString(row["c_contactinfo"]); 
      textBox_pinfo1.Text = Convert.ToString(row["profile_info"]); 
      textBox_refno1.Text = Convert.ToString(row["c_8digitrefno"]); 
      textBox_staffid1.Text = Convert.ToString(row["staff_id"]); 
     } 

     private void button_close_Click(object sender, EventArgs e) 
     { 
      Close(); 
     } 

     private void button_update_Click(object sender, EventArgs e) 
     { 
      row["c_name"] = "textBox_name1"; 
      row["c_address"] = "textBox_address1"; 
      row["c_contactinfo"] = "int.Parse(textBox_cinfo1)"; 
      row["c_8digitrefno"] = "(textBox_pinfo1)"; 
      row["profile_info"] = "textBox_refno1"; 
      row["staff_id"] = "int.Parse(textBox_staffid1)"; 

      adapter.Update(row); 
     } 
    } 
} 

讚賞幫助和解釋三江源。

+0

哪條線給你這個錯誤?你調試了你的代碼嗎? –

+0

是的,我做到了。該行[「staff_id」] =「int.Parse(textBox_staffid1)」;和行[「c_contactinfo」] =「int.Parse(textBox_cinfo1)」;線。 –

回答

0

這是因爲您的列在Access數據庫中聲明爲整數,並且您嘗試在其中插入字符串值。而且我也認爲你無法在指定的表格中獲得適當的值,因爲您通過字符串(row["profile_info"] = "textBox_refno1";)更新了列,這會將textBox_refno1插入到profile_info列中,而不是TextBox值。 試試這個:

row["staff_id"] = Convert.ToInt32(textBox_staffid1.Text); 

更新: 複製並粘貼下面的代碼,你將永遠不會有任何問題:

private void button_update_Click(object sender, EventArgs e) 
    { 
     row["c_name"] = textBox_name1.Text; 
     row["c_address"] = textBox_address1.Text; 
     row["c_contactinfo"] = int.Parse(textBox_cinfo1.Text); 
     row["c_8digitrefno"] = textBox_pinfo1.Text; 
     row["profile_info"] = textBox_refno1.Text; 
     row["staff_id"] = int.Parse(textBox_staffid1.Text); 

     adapter.Update(row); 

     MessageBox.Show("Data has been updated"); 
    } 

希望這有助於。

+0

啊,我跟着你說的,得到這個錯誤。 「不能隱式地將int類型轉換爲字符串的形式 –

+0

我的錯誤,我更新了文章 – saber

+0

仍然不能,同樣的錯誤依然。輸入字符串格式不正確。不能存儲 in staff_id Column。預期的類型是Int32。 –

0
 row["c_name"] = textBox_name1.Text; 
     row["c_address"] = textBox_address1.Text; 
     ... 
     int val; 
     if(int.TryParse(textBox_staffid1.Text, out val)) 
     { 
      row["staff_id"] = val; 
     } 

我認爲,您的文本框中的文本格式不正確。

+0

已更改,但仍面臨同樣的錯誤,輸入字符串格式不正確。不能在staff_id列中存儲。預期的類型是Int32。 –