2012-03-12 77 views
0

正如你從我的代碼可以看出,我絕對是一個初學者。在搜索了關於LINQ to SQL問題的其他類似問題之後,我發現自己仍然看起來停留在兩個目標上。 1)添加一個新的條目,其中包含來自三個組合框和日期選擇器的用戶選擇的輸入,以及2)使用datagridview中的交互更新現有數據庫條目。Linq to SQL添加和更新

我的Windows窗體的DataGridView顯示的是下面的輸出

**select b.Date, a.EmployeeName, 
     c.ProjectName, b.Hours 
from dbo.Employees a 
left outer join dbo.EmployeeProjectHours b 
    on a.EmployeeId = b.EmployeeId 
left outer join dbo.Projects c 
    on b.ProjectId = c.ProjectId** 

這裏是我的add方法向用戶提供我項目名,EmployeeName,日期和時間。任何外行的想法將不勝感激。

我不明白運行插入一個錯誤,但沒有被添加到我的DAB以及

 using (ProjectHoursDataContext dbInsert = new ProjectHoursDataContext()) 
    { 
     this.Validate(); 

     EmployeeProjectHour empHours = new EmployeeProjectHour(); 

     empHours.Date = dateDateTimePicker.Value; 
     empHours.Hours = Convert.ToDecimal(hoursComboBox.Text); 
     empHours.ProjectId = dbInsert.Projects.First(p => p.ProjectName == projectNameComboBox.Text).ProjectId; 
     empHours.EmployeeId = dbInsert.Employees.First(m => m.EmployeeName == employeeNameComboBox.Text).EmployeeId; 

     db.EmployeeProjectHours.InsertOnSubmit(empHours); 
     dbInsert.SubmitChanges(); 

    } 

這裏是我的更新嘗試直接從DataGridView中使用的更新。我得到以下錯誤:類型「System.ArgumentException」的第一次機會異常出現在System.Windows.Forms.dll中

 using (ProjectHoursDataContext dbUpdate = new ProjectHoursDataContext()) 
    { 
     this.Validate(); 
     dataGridView1.AutoGenerateColumns = true; 
     projectBindingSource.DataSource = dbUpdate; 
     projectBindingSource.DataMember = "Updates"; 

     projectBindingSource.EndEdit(); 
     dbUpdate.SubmitChanges(); 
    } 
+0

看起來你先得到一個現有的'員工id',然後將你的新'employeeId'設置爲該值。 'EmployeeID'是主鍵嗎?身份? – gideon 2012-03-12 04:50:59

+0

是的,EmployeeID是主鍵。 EmployeeName組合框,我限制只能從現有員工中進行選擇,這就是爲什麼我要將employeeID設置爲與所選員工的數據庫中已有數據相匹配的原因。我猜我的格式不正確,或者是我設定的順序的問題? – Charlene 2012-03-12 05:03:02

+0

那麼你是否想要將項目添加到現有員工?或者它看起來更像是現有的'Employee'' Project'和'EmployeeProjectHours'記錄,你應該編輯它們? – gideon 2012-03-12 05:07:38

回答

0

我最好的猜測到目前爲止,您希望編輯和更改現有的EmployeeProjectEmployeeProjectHours記錄。

所以,你會怎麼做:

using (ProjectHoursDataContext dbInsert = new ProjectHoursDataContext()) 
{ 
    this.Validate(); 

    // Get the records 
    Employee emp = new Employee(); 
    Project proj = new Project(); 
    EmployeeProjectHour empHours = new EmployeeProjectHour(); 

    // Set new values to Employees tables 
    emp = dbInsert.Employees 
     .First(m => m.EmployeeName == employeeNameComboBox.Text); 
    //just get the empployee 

    //setting values will update it  
    emp.EmployeeName = employeeNameComboBox.Text; 

    // GET an existing project 
    proj = dbInsert.Projects 
        .First(p => p.ProjectName == projectNameComboBox.Text); 

    //update its values. 
    proj.ProjectName = projectNameComboBox.Text; 
    proj.ProjectDescription = "Test"; 

    //GET an empHours 
    empHours = dbInsert.Projects.First(p => p.EmployeeId == emp.EmployeeId && 
          p.ProjectId == proj.ProjectId); 
    //set its values 
    empHours.Date = dateDateTimePicker.Value; 
    empHours.Hours = Convert.ToDecimal(hoursComboBox.Text); 

    dbInsert.SubmitChanges(); 
} 
+0

使用(ProjectHoursDataContext dbInsert = new ProjectHoursDataContext()) { this.Validate(); EmployeeProjectHour empHours = new EmployeeProjectHour(); empHours.Date = dateDateTimePicker.Value; empHours.Hours = Convert.ToDecimal(hoursComboBox.Text); empHours.ProjectId = dbInsert.Projects.First(p => p.ProjectName == projectNameComboBox.Text).ProjectId; empHours.EmployeeId = dbInsert.Employees.First(m => m.EmployeeName == employeeNameComboBox.Text).EmployeeId; dbInsert.SubmitChanges(); } – Charlene 2012-03-12 06:03:31

0

除了下面的新代碼,我也把我的狀態增量爲我的項目數據庫爲NO。我從之前的一個stackoverflow討論中設定了它。謝謝

public void AddInfo() 
    { 
    db.Connection.Open(); 

     this.Validate(); 

     EmployeeProjectHour empHours = new EmployeeProjectHour(); 

     empHours.Date = dateDateTimePicker.Value; 
     empHours.Hours = Convert.ToDecimal(hoursComboBox.Text); 
     empHours.ProjectId = db.Projects.First(p => p.ProjectName == projectNameComboBox.Text).ProjectId; 
     empHours.EmployeeId = db.Employees.First(m => m.EmployeeName == employeeNameComboBox.Text).EmployeeId; 

     db.EmployeeProjectHours.InsertOnSubmit(empHours); 
     db.SubmitChanges(); 
     db.Connection.Close(); 

    }