私はSQLコマンドのパラメータ(昨日この概念について簡単に説明しましたが、理解できないかもしれません)と一般的なOOPにはまったく慣れていませんが、楽しんでいます:D
これが昨日の私の質問へのリンクです;) みんな本当に助けてくれましたが、今はアプリにこれを実装するのに苦労しています
私は実際に例として構築しました:
"btnInsert" をクリックすると、2 つのユーザー入力 "comboBoxEmployeeId" (selectedvalue は int) + "txtDuration" (値は 10 進数) を含むフォーム "formConnection.cs" を処理します: `
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;初期カタログ=TEST;統合セキュリティ=False;接続タイムアウト=30;ユーザー インスタンス=False;ユーザー ID=basicuser;パスワード=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(); } }
これは機能しなくても機能します-txtDurationテキストボックスに2.7のような「10進数」の値を入力しても、次のメッセージが表示されます:
System.FormatException: Le format de la chaîne d'entrée est が正しくありません。= "The input string format is not correct" → System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) → System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt) → System .Convert.ToDecimal(String value) à SQLStatementParameters.formConnection.btnInsert_Click(Object sender, EventArgs e) dans D:\C#\Projects\SQLStatementParameters\SQLStatementParameters\formConnection.cs:ligne 26 à System.Windows.Forms.Control.OnClick( EventArgs e)".....
- DBには何も保存されません(値がフォームからオブジェクト「コントラクト」に転送されず、INSERTを実行するメソッドに転送されないかのように)、新しいレコードがありますが、すべて空です
私は何を間違っていますか?ご協力ありがとうございました!
ブライス