Как добавить в базу данных
У меня возникли проблемы с добавлением в базу данных. Я использую 3-уровневую архитектуру и с трудом добавляю ее в базу данных.
В моем слое доступа к данным у меня есть вспомогательный класс БД, который помогает с выполнением запросов.
public static bool ExecuteNonQuery(string commandName, CommandType cmdType, SqlParameter[] pars) { int result = 0; using (SqlConnection con = new SqlConnection(connString)) { using (SqlCommand cmd = con.CreateCommand()) { cmd.CommandType = cmdType; cmd.CommandText = commandName; cmd.Parameters.AddRange(pars); try { if (con.State != ConnectionState.Open) { con.Open(); } result = cmd.ExecuteNonQuery(); } catch { throw; } } } return result > 0; }
И в моем dbAccess у меня есть
public bool RegisterOfficer(Officer o) { SqlParameter[] pars = new SqlParameter[] { new SqlParameter("@Officer",o.officerID ), new SqlParameter("@StationID",o.StationID ), new SqlParameter("@FirstName",o.firstName ), new SqlParameter("@LastName", o.lastName), new SqlParameter("@Address", o.address), new SqlParameter("@DateOfBirth", o.dateOfBirth), new SqlParameter("@CellPhone",o.cellPhone), new SqlParameter("@Language",o.language), new SqlParameter("@Email", o.email), new SqlParameter("@Rank", o.rank), new SqlParameter("@Password", o.password), }; return DBHelper.ExecuteNonQuery("spRegisterOfficer", CommandType.StoredProcedure, pars); }
В моем слое бизнес-логики у меня есть
public bool RegisterOfficer(Officer o) { return db.RegisterOfficer(o); }
И мой код для кнопки выглядит так
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Edocket"].ConnectionString); BusinessLogicLayer bl = new BusinessLogicLayer(); Officer newOfficer = null; protected void CreateUser_Click(object sender, EventArgs e) { newOfficer = new Officer(); newOfficer.officerID =Convert.ToInt64(txtIDNum.Text); newOfficer.StationID = int.Parse(txtStation.Text); newOfficer.firstName = txtFirstName.Text; newOfficer.lastName = txtLastName.Text; newOfficer.address = txtAddress.Text; newOfficer.dateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text); newOfficer.cellPhone = txtCellPhone.Text; newOfficer.language = txtLanguage.Text; newOfficer.email = txtEmail.Text; newOfficer.rank = txtRank.Text; newOfficer.password = txtPassword.Text; try { bl.RegisterOfficer(newOfficer); Response.Redirect("Default.aspx"); } catch (Exception) { }
Но ничего не происходит после того, как я нажимаю кнопку, и записи не добавляются в базу данных
Что я уже пробовал:
Я пробовал много гуглить и отслеживать код
PIEBALDconsult
Ну, может быть, хватит глотать исключения и посмотрим, что получится.
KevinClaassens
Теперь он говорит, что ожидает параметр @OfficerID, но, насколько я вижу, я предоставил все необходимые параметры
PIEBALDconsult
"@Officer", o. officerID <= = не так уж и много.
KevinClaassens
Как мне это исправить?
PIEBALDconsult
Исправьте имя параметра.
KevinClaassens
Боже мой! Спасибо,но я все еще получаю ту же ошибку
PIEBALDconsult
Убедитесь, что он не нулевой.
KevinClaassens
Да я убедился что он не нулевой
Dave Kreskowiak
Избавьтесь от блока try/catch, чтобы вы могли видеть любые выбрасываемые исключения.
KevinClaassens
Я сделал. Затем я получил сообщение об ошибке, говорящее, что он ожидает параметр @OfficerID. Он все еще показывает эту ошибку после того, как я исправил проблему с именем параметра, на которую указал PIEBALDconsult
PIEBALDconsult
Дважды проверьте имя в процедуре.
KevinClaassens
Я обнаружил свою ошибку. Большое вам спасибо за время, потраченное на помощь. Это очень ценится:)