Я совершенно новичок в параметрах команды SQL (вчера я кратко объяснил эту концепцию, и, возможно, не понял ее) и в целом в ООП, но мне это нравится: D
Вот ссылка на мой вчерашний вопрос;) Ребята действительно помогло, но теперь я изо всех сил пытаюсь реализовать это в своем приложении
Я собственно построил в качестве примера:
Форма "formConnection.cs", содержащая 2 пользовательских ввода "comboBoxEmployeeId" (выбранное значение - целое число) + "txtDuration" (значение является десятичным), при нажатии на "btnInsert" я обрабатываю это: `
sqlDbOperations sqlDbOp = new sqlDbOperations();` public void btnInsert_Click(object sender, EventArgs e) { //Create new contract var contract = new contract{ employeeId = Convert.ToInt32(this.comboBoxEmployeeName.SelectedValue), duration = Convert.ToDecimal(this.txtDuration.Text) }; //Insert command to Db sqlDbOp.insertContract(); MessageBox.Show("Done"); }
Класс "contract.cs"
class contract { public int employeeId { get; set; } public decimal duration { get; set; } }
Класс "sqlDbOperations.cs"
public class sqlDbOperations {// Строка подключения // SqlConnection myConnection = new SqlConnection ("ATLELAG786576 \ SQLEXPRESS; Initial Catalog = TEST; Integrated Security = False; Connect Timeout = 30; User Instance = False; User ID = basicuser; Password = basicpw" ); SqlConnection myConnection = new SqlConnection (ConfigurationManager.ConnectionStrings ["EngAdminSqlDbConnectionString"]. ConnectionString);
//Connection open //SqlConnection.Open() is a void function and does not return an error but throws an exception so remember to put it in a try/catch brace //Rather than having the program explode in front of the user public void openConnection() { //Connection open try { myConnection.Open(); } catch (Exception e) { Console.WriteLine(e.ToString()); MessageBox.Show(e.ToString()); } } //Connection close //Try/catch because like SqlConnection.Open() it does not return errors but throws an exception instead public void closeConnection() { try { myConnection.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } contract contract = new contract(); public void insertContract() { //Open openConnection(); //Command SqlCommand myCommand = new SqlCommand("INSERT INTO tblContracts (EmployeeId, Duration) VALUES (@employeeId, @contractDuration)", myConnection); //Get values from form formConnection formInput = new formConnection(); //Add parameters myCommand.Parameters.AddWithValue("@employeeId", contract.employeeId); myCommand.Parameters.AddWithValue("@contractDuration", contract.duration); //Execute myCommand.ExecuteNonQuery(); //Close closeConnection(); } }
Это работает без работы - когда я помещаю «десятичное» значение, например 2.7, в текстовое поле txtDuration, я все равно получаю сообщение:
System.FormatException: неверный формат входящей цепи. = «Формат входной строки неправильный» à System.Number.StringToNumber (строка str, параметры NumberStyles, NumberBuffer & number, информация NumberFormatInfo, логический parseDecimal) à System.Number.ParseDecimal (значение String, NumberStyles options, NumberFormatInfo numfmt) à System.Convert.ToDecimal (строковое значение) à SQLStatementParameters.formConnection.btnInsert_Click (отправитель объекта, EventArgs e) в D: \ C # \ Projects \ SQLStatementParameters \ SQLStatementParameters \ formConnectionParameters \ formConnection 26 .Forms.Control.OnClick (EventArgs e) ".....
- В БД ничего не хранится (как будто значения не переносятся из формы в объект «контракт», а затем в метод, выполняющий INSERT), у меня есть новая запись, но она пуста.
Что я делаю неправильно? Спасибо за помощь!
Брайс