Я пытаюсь внести изменения в значения Data-Grid с помощью «запроса UPDATE», но по какой-то причине я не могу обновить поле со списком.
Обновление других полей работает нормально, и я не получаю сообщение об ошибке.
Я использую 3-уровневую архитектуру с хранимыми процедурами, чтобы данные передавались из моей базы данных через 2 класса, пока не достигли моего класса формы для представления пользователю.
Вот мой запрос UPDATE:
ALTER PROCEDURE [dbo].[us_ChangeProject]
@ProjectID varchar(10),
@ProjectTitle varchar(50),
@ProjectDescription nvarchar(50),
@ProjectStartDate smalldatetime,
@ProjectDueDate smalldatetime,
@ProjectOwner nvarchar(10),
@SupervisorID varchar(10),
@ProjectStatus nvarchar(10)
UPDATE ProjectTable
SET ProjectTitle = @ProjectTitle, ProjectDescription =
@ProjectDescription,ProjectStartDate = @ProjectStartDate,
ProjectDueDate = @ProjectDueDate,ProjectOwner = @ProjectOwner,
SupervisorID = @SupervisorID, ProjectStatus = @ProjectStatus
WHERE ProjectID = @ProjectID
Метод уровня доступа к данным, который вызывает хранимые процедуры:
public DataTable GetAllProjects()
{
DataTable dtProjects = new DataTable();
string sqlinsert = "SELECT * FROM ProjectTable";
using (var dbConn = new SqlConnection("Data Source=ZEUS\\MSSQLSERVERDEV;Initial Catalog=Project;Integrated Security=True"))
{
using (var dbCmd = new SqlCommand(sqlinsert, dbConn))
{
using (var dbAdapter = new SqlDataAdapter(dbCmd))
{
dbAdapter.Fill(dtProjects);
return dtProjects;
}
}
}
}
public DataTable GetAllStudentNames()
{
DataTable dtStudents = new DataTable();
string sqlinsert = "us_GetAllStudentNames";
using (var dbConn = new SqlConnection("Data Source=ZEUS\\MSSQLSERVERDEV;Initial Catalog=Project;Integrated Security=True"))
{
using (var dbCmd = new SqlCommand(sqlinsert, dbConn))
{
using (var dbAdapter = new SqlDataAdapter(dbCmd))
{
dbAdapter.Fill(dtStudents);
return dtStudents;
}
}
}
}
public DataTable GetAllSupervisorNames()
{
DataTable dtSupervisors = new DataTable();
string sqlinsert = "us_GetAllSupervisorNames";
using (var dbConn = new SqlConnection("Data Source=ZEUS\\MSSQLSERVERDEV;Initial Catalog=Project;Integrated Security=True"))
{
using (var dbCmd = new SqlCommand(sqlinsert, dbConn))
{
using (var dbAdapter = new SqlDataAdapter(dbCmd))
{
dbAdapter.Fill(dtSupervisors);
return dtSupervisors;
}
}
}
}
public int InsertProject(string projectID, string projectTitle, string projectDescription, string projectStartDate, string projectDueDate, string projectOwner, string projectSupervisor, string projectStatus)
{
string sqlinsert = "us_InsertProject";
using (var dbConn = new SqlConnection("Data Source=ZEUS\\MSSQLSERVERDEV;Initial Catalog=Project;Integrated Security=True"))
{
using (var dbCmd = new SqlCommand(sqlinsert, dbConn))
{
dbCmd.CommandType = CommandType.StoredProcedure;
dbCmd.Parameters.Add("@ProjectID", SqlDbType.VarChar).Value = projectID;
dbCmd.Parameters.Add("@ProjectTitle", SqlDbType.VarChar).Value = projectTitle;
dbCmd.Parameters.Add("@ProjectDescription", SqlDbType.NVarChar).Value = projectDescription;
dbCmd.Parameters.Add("@ProjectStartDate", SqlDbType.SmallDateTime).Value = projectStartDate;
dbCmd.Parameters.Add("@ProjectDueDate", SqlDbType.SmallDateTime).Value = projectDueDate;
dbCmd.Parameters.Add("@ProjectOwner", SqlDbType.NVarChar).Value = projectOwner;
dbCmd.Parameters.Add("@SupervisorID", SqlDbType.VarChar).Value = projectSupervisor;
dbCmd.Parameters.Add("@ProjectStatus", SqlDbType.NVarChar).Value = projectStatus;
dbConn.Open();
int x = dbCmd.ExecuteNonQuery();
return x;
}
}
}
public int ChangeProject(string projectID, string projectTitle, string projectDescription, string projectStartDate, string projectDueDate, string projectOwner, string projectSupervisor, string projectStatus)
{
string sqlinsert = "us_ChangeProject";
using (var dbConn = new SqlConnection("Data Source=ZEUS\\MSSQLSERVERDEV;Initial Catalog=Project;Integrated Security=True"))
{
using (var dbCmd = new SqlCommand(sqlinsert, dbConn))
{
dbCmd.CommandType = CommandType.StoredProcedure;
dbCmd.Parameters.Add("@ProjectID", SqlDbType.VarChar).Value = projectID;
dbCmd.Parameters.Add("@ProjectTitle", SqlDbType.VarChar).Value = projectTitle;
dbCmd.Parameters.Add("@ProjectDescription", SqlDbType.NVarChar).Value = projectDescription;
dbCmd.Parameters.Add("@ProjectStartDate", SqlDbType.SmallDateTime).Value = projectStartDate;
dbCmd.Parameters.Add("@ProjectDueDate", SqlDbType.SmallDateTime).Value = projectDueDate;
dbCmd.Parameters.Add("@ProjectOwner", SqlDbType.NVarChar).Value = projectOwner;
dbCmd.Parameters.Add("@SupervisorID", SqlDbType.VarChar).Value = projectSupervisor;
dbCmd.Parameters.Add("@ProjectStatus", SqlDbType.NVarChar).Value = projectStatus;
dbConn.Open();
int x = dbCmd.ExecuteNonQuery();
return x;
}
}
}
Затем бизнес-класс ':
class Projects
{
DataAccessLayer dl = new DataAccessLayer();
public string ProjectID { get; set; }
public string ProjectTitle { get; set; }
public string ProjectDescription { get; set; }
public string ProjectStartDate { get; set; }
public string ProjectDueDate { get; set; }
public string ProjectOwner { get; set; }
public string ProjectSupervisor { get; set; }
public string ProjectStatus { get; set; }
public DataTable GetAllProjects()
{
return dl.GetAllProjects();
}
public int InsertProject(string projectID, string projectTitle, string projectDescription, string projectStartDate, string projectDueDate, string projectOwner, string projectSupervisor, string projectStatus)
{
return dl.InsertProject(projectID, projectTitle, projectDescription, projectStartDate, projectDueDate, projectOwner, projectSupervisor, projectStatus);
}
public int ChangeProject(string projectID, string projectTitle, string projectDescription, string projectStartDate, string projectDueDate, string projectOwner, string projectSupervisor, string projectStatus)
{
return dl.ChangeProject(projectID, projectTitle, projectDescription, projectStartDate, projectDueDate, projectOwner, projectSupervisor, projectStatus);
}
}
class Student
{
DataAccessLayer dl = new DataAccessLayer();
public string StudentID { get; set; }
public string StudentFirstName { get; set; }
public string StudentSurname { get; set; }
public string StudentCellNo { get; set; }
public string StudentStatus { get; set; }
public DataTable GetAllStudentNames()
{
return dl.GetAllStudentNames();
}
public DataTable GetAllStudents()
{
return dl.GetAllStudents();
}
public int InsertStudent(string StudentID, string StudentFirstName, string StudentSurname, string StudentCellNo, string StudentStatus)
{
return dl.InsertStudent(StudentID, StudentFirstName, StudentSurname, StudentCellNo, StudentStatus);
}
}
class Supervisor
{
DataAccessLayer dl = new DataAccessLayer();
public string SupervisorID { get; set; }
public string SupervisorFirstName { get; set; }
public string SupervisorSurname { get; set; }
public string SupervisorCellNo { get; set; }
public string SupervisorStatus { get; set; }
public DataTable GetAllSupervisorNames()
{
return dl.GetAllSupervisorNames();
}
public DataTable GetAllSupervisors()
{
return dl.GetAllSupervisors();
}
public int InsertSupervisor(string SupervisorID, string SupervisorFirstName, string SupervisorSurname, string SupervisorCellNo, string SupervisorStatus)
{
return dl.InsertSupervisor(SupervisorID, SupervisorFirstName, SupervisorSurname, SupervisorCellNo, SupervisorStatus);
}
}
И, наконец, уровень представления:
public partial class frmProjects : Form
{
Projects pr = new Projects();
Student st = new Student();
Supervisor su = new Supervisor();
public frmProjects()
{
InitializeComponent();
}
private void frmProjects_Load(object sender, EventArgs e)
{
dgvProjects.DataSource = pr.GetAllProjects();
cmbOwner.DataSource = st.GetAllStudentNames();
cmbOwner.DisplayMember = "FullName";
cmbOwner.ValueMember = "StudentID";
cmbOwner.Text = "";
cmbSupervisor.DataSource = su.GetAllSupervisorNames();
cmbSupervisor.DisplayMember = "SVFullName";
cmbSupervisor.ValueMember = "SupervisorID";
cmbSupervisor.Text = "";
}
private void dgvProjects_SelectionChanged(object sender, EventArgs e)
{
if (dgvProjects.SelectedRows.Count > 0)
{
DataGridViewRow r = this.dgvProjects.SelectedRows[0];
txtProjectID.Text = r.Cells[0].Value.ToString();
txtProjectTitle.Text = r.Cells[1].Value.ToString();
txtDescription.Text = r.Cells[2].Value.ToString(); ;
dteStartDate.Text = r.Cells[3].Value.ToString();
dteDueDate.Text = r.Cells[4].Value.ToString();
cmbOwner.Text = r.Cells[5].Value.ToString();
cmbSupervisor.Text = r.Cells[6].Value.ToString();
txtStatus.Text = r.Cells[7].Value.ToString();
}
}
private void btnChange_Click(object sender, EventArgs e)
{
pr.ChangeProject(txtProjectID.Text, txtProjectTitle.Text, txtDescription.Text, dteStartDate.Text, dteDueDate.Text, cmbOwner.SelectedValue.ToString(), cmbSupervisor.SelectedValue.ToString(), txtStatus.Text);
dgvProjects.DataSource = pr.GetAllProjects();
}
}
Вот хранимые процедуры, которые загружаются вместе с формой, заполняющей таблицу данных и два поля со списком:
ALTER PROCEDURE [dbo].[up_GetAllProjects]
SELECT ProjectID, ProjectTitle, ProjectDescription, ProjectStartDate, ProjectDueDate, StudentSurname + ' ' + StudentFirstName AS OwnerName, SupervisorSurname + ' ' + SupervisorFirstName AS SupervisorName, ProjectStatus
FROM ProjectTable, SupervisorTable, StudentTable WHERE ProjectTable.SupervisorID = SupervisorTable.SupervisorID AND ProjectOwner = StudentID
ALTER PROCEDURE [dbo].[us_GetAllSupervisorNames]
SELECT SupervisorID, SupervisorFirstName + ' ' + SupervisorSurname AS SVFullName FROM SupervisorTable
ALTER PROCEDURE [dbo].[us_GetAllStudentnames]
SELECT StudentID, StudentSurname + ' ' + StudentFirstName AS FullName FROM StudentTable
Ваша помощь будет высоко оценена