2012-03-12 2 views
0

Как вы можете узнать из моего кода, я абсолютно новичок. После поиска других подобных проблем в задачах LINQ to SQL, я обнаружил, что все еще, похоже, застрял в двух целях. 1) Добавление новой записи с входными данными из пользовательского выбора из трех списков сопоставлений и дампикера и 2) Обновление существующей записи базы данных с использованием взаимодействий из datagridview.Linq to SQL ADD и обновление

Мои окна формы 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 пользователь предоставляет мне Projectname, EmployeeName, дата и часы. Любые мысли для непрофессионала были бы оценены.

Я не получаю сообщение об ошибке выполняется вставка, но ничего не добавляют к моему мазок, а

 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(); 

    } 

Вот мой Update пытается использовать обновления непосредственно из 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

Похоже, что вы получаете существующий идентификатор сотрудника, а затем устанавливаете свой новый «employeeId» на это значение. Является ли «EmployeeID» первичным ключом? Идентичность? – gideon

+0

Да, EmployeeID является первичным ключом. Комбобокс EmployeeName, я ограничиваю только выбор из существующих сотрудников, поэтому я устанавливаю идентификатор employeeID в соответствие с тем, что уже находится в db для выбранного сотрудника. Я предполагаю, что мой формат неверен или это вопрос заказа, который я задал? – Charlene

+0

Так вы пытаетесь добавить проекты к существующему сотруднику? Или он больше похож на существующие записи «Сотрудник» и «Рабочие инструменты», и вы должны их редактировать? – gideon

ответ

0

Мой лучший догадаться до сих пор есть, вы хотите изменить, и изменения существующие Employee, Project и EmployeeProjectHours записей.

Таким образом, вы должны сделать следующее:

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

0

Помимо нового кода ниже, я также установить статус приращения для моей базы данных проектов к NO. Я установил его yes из предыдущего обсуждения 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(); 

    } 
Смежные вопросы