Для моего проекта Uni мы обязаны использовать 3-уровневую архитектуру и хранимые процедуры.(то есть: уровень доступа к данным, уровень бизнес-класса и уровень представления)
Цель состоит в том, чтобы добавить данные в базу данных на C # и затем иметь возможность отображать эти данные в нужной форме.
Я могу загружать жестко закодированные данные из базы данных и просматривать их в виде сетки данных совершенно нормально, но добавление кажется проблемой.Кроме того, хранимая процедура говорит, что она работает, это SSMS.
Это именно та ошибка, которую я получаю:
System.Data.SqlClient.SqlException: процедура или функция 'us_InsertSupervisors' ожидает параметр '@SupervisorID ', который не был предоставлен.
Вот моя хранимая процедура, сделанная для ВСТАВКИ данных:
ALTER PROCEDURE [dbo].[us_InsertSupervisors]
@SupervisorID varchar(10),
@SupervisorFirstName varchar(50),
@SupervisorSurname varchar(50),
@SupervisorCellNo varchar(50),
@SupervisorStatus varchar(10)
INSERT INTO SupervisorTable(SupervisorID, SupervisorFirstName, SupervisorSurname, SupervisorCellNo, SupervisorStatus)
Values(@SupervisorID, @SupervisorFirstName, @SupervisorSurname, @SupervisorCellNo, @SupervisorStatus )
Затем мой метод уровня доступа к данным для извлечения хранимой процедуры:
public int InsertSupervisor(string supervisorID, string supervisorFirstName, string supervisorSurname, string supervisorCellNo, string supervisorStatus)
{
if (dbConn.State == ConnectionState.Closed)
dbConn.Open();
string sqlinsert = "us_InsertSupervisors";
dbCmd.CommandType = CommandType.StoredProcedure;
dbCmd = new SqlCommand(sqlinsert, dbConn);
dbCmd.Parameters.AddWithValue("@SupervisorID", supervisorID);
dbCmd.Parameters.AddWithValue("@SupervisorFirstName", supervisorFirstName);
dbCmd.Parameters.AddWithValue("@SupervisorSurname", supervisorSurname);
dbCmd.Parameters.AddWithValue("@SupervisorCellNo", supervisorCellNo);
dbCmd.Parameters.AddWithValue("@SupervisorStatus", supervisorStatus);
int x = dbCmd.ExecuteNonQuery();
return x;
}
Уровень бизнес-класса:
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 frmSupervisor : Form
{
Supervisor su = new Supervisor();
public frmSupervisor()
{
InitializeComponent();
}
private void frmSupervisor_Load(object sender, EventArgs e)
{
dgvSupervisors.DataSource = su.GetAllSupervisors();
}
private void btnAdd_Click(object sender, EventArgs e)
{
su.InsertSupervisor(txtSupervisorID.Text, txtSupervisorFirstName.Text, txtSupervisorSurname.Text, txtSupervisorCellNumber.Text, txtSupervisorStatus.Text);
}
C # направляет меня к этой строке на уровне доступа к данным (InsertSupervisor)Метод:
int x = dbCmd.ExecuteNonQuery();
Ваша помощь будет высоко ценится.