2013-05-09 42 views
1

我有三個表。我已經叫主表稱爲employeeJobdetailstable爲什麼我的方法沒有更新

Fieldname  Data Type 
* EJobID  Text 
    EID   Text 
    JobDescrip Text 

第三個表稱爲EmployeeAppraisalDetails

employeemaintable

Fieldname Data Type 
* EID   Text 
    Firsname  Text 
    Surname  Text 

二表

Fieldname   DataType 
    EApprID   Text 
    EJobID   Text 
    GoalsAchieved  Memo 

關係employeemaintable可以有很多employeeJobdetailstable 和employeeJobdetailstable可以有很多EmployeeAppraisalDetails。

  1. 我可以成功地創建,更新和刪除記錄employeemaintable
  2. 我可以成功地創建,更新和刪除記錄employeeJobdetailstable
  3. 我可以插入和刪除記錄EmployeeAppraisalDetails但我無法更新。

這裏是我的更新方法...

EAppr類

public static void AUpdate(string goals, string eapprid) 
    { 
     var con = GetConnection(); 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = (@"UPDATE [EmployeeAppraisalDetails] SET [Goalsachieved] = ? WHERE [EApprID] = ?"); 
     cmd.Parameters.AddWithValue("@Goalsachieved", goals); 
     cmd.Parameters.AddWithValue("@EApprID", eapprid); 
     cmd.Connection = con; 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

主要類

private void btnUpdateAppr_Click(object sender, EventArgs e) 
    { 
     EAppr.AUpdate(cBApprScore.Text, txtApprID.Text); 
    } 

我的問題

我在做什麼錯?沒有錯誤,所以我認爲這是因爲EmployeeAppraisalDetails沒有鏈接到employeemaintable,或者我在做錯誤的更新方法?這個想法是讓employeeJobdetail穩定許多EmployeeAppraisalDetails。一個職位可以有很多評估。

巨大的感謝

更新1 我做的ExecuteNonQuery調試,這是我得到

string goals === "Test" 
string eapprid === "". 

更新2

改變的數據類型爲GoalsAchieved從備忘錄到文本。我目前在EmployeeAppraisalDetails中有兩條記錄。我只能更新最近一次記錄而非以前的記錄。所以,當我關閉並重新啓動應用程序我不能代表任何的記錄

更新3 因爲我使用的MS Access 2003和C#更新,我已經決定不再在這個場合使用更新的參數。當SQL Server應該被使用時,這是不值得的麻煩。

+2

ExecuteNonQuery返回受影響的記錄數。那個數字是多少? – LarsTech 2013-05-09 17:31:45

+0

當您在MS-Access SQL Viewer中運行查詢時,您是否看到相同的問題? – 2013-05-09 17:42:26

+0

我不知道它是什麼,但我做了一個調試,如你所建議的,我已經更新。我也將使用MS-Access SQL Viewer。 – bucketblast 2013-05-09 17:51:46

回答

0

我有更新3爲我的理由關閉此主題。感謝大家提供寶貴的專業知識。

0

AddWithValue並不總是完美的,我們只發送字符串值和參數名稱。但實際的數據類型是訪問數據庫中的備忘錄。通過AddWithValue方法映射正確的數據類型時可能會出現問題。所以更好地給類型和添加如下參數

cmd.Parameters.Add("@GoalsAchieved", OleDbType.LongVarWChar).Value = goals; 
+0

我已將數據類型從備忘錄更改爲文本。如果你好奇,我有更新2 – bucketblast 2013-05-09 20:04:25

相關問題