使用课程

时间:2016-02-08 12:02:21

标签: c# winforms class

我正在尝试将我的Textbox值从另一个表单用于类以将项目插入到我的数据库中。 我尝试创建我的Form1的另一个实例,它是我希望从中获取值的表单的名称,但是当我点击我的提交按钮时,它会返回0项目到我的数据库吗?

public void Insert()
    {
        Form1 mform = new Form1();
        string query = "INSERT INTO parts (item_id, description, brand, model, color, quantity) VALUES('0', '"
               + mform.Description.Text
                 + "','" + mform.Brand.Text
                + "','" + mform.Model.Text
                + "','" + mform.Color.Text
                + "','" + mform.Quantity.Text + "')";

        if (this.OpenConnection() == true)
        {
           MySqlCommand cmd = new MySqlCommand(query, connection);            
           cmd.ExecuteNonQuery();                
           this.CloseConnection();
        }
    }

2 个答案:

答案 0 :(得分:0)

当您实例化Form1()对象的新实例时,您假设新实例"描述,品牌,型号,颜色和数量" TextBox's包含文字? TextBox.Text的默认值是其string属性类型null的默认值。

理想情况下,您将从表单实例中获取用户填充的值,然后将其传递到DB中,如下所示:

public void Insert()
{
    using (var mform = new Form1())
    {
        // Ensure that the user entered values...
        if (mform.ShowDialog() == DialogResult.Ok)
        {
            string query = "INSERT INTO parts (item_id, description, brand, model, color, quantity) VALUES('0', '"
               + mform.Description.Text
               + "','" + mform.Brand.Text
               + "','" + mform.Model.Text
               + "','" + mform.Color.Text
               + "','" + mform.Quantity.Text + "')";

            if (this.OpenConnection() == true)
            {
               var cmd = new MySqlCommand(query, connection);
               cmd.ExecuteNonQuery();
               this.CloseConnection();
            }
        }
    }
}

此外,您应该避免使用内联SQL,而是使用存储过程,或者至少使用SqlParameter's

答案 1 :(得分:0)

不,您无法通过创建新实例来访问Form1中的class值。要访问textbox值,您需要执行以下操作:

  1. property
  2. 中创建公开class
  3. 在某些适当的事件(例如textbox
  4. 中为TextChanged值分配属性
  5. 访问类中的属性以获取textbox值并将其保存到数据库。
  6. 示例

    类别:

    public class DataAccess
    {
        public string IncomingValue { get; set; }
    
        public string SaveToDatabase()
        {
            string valueToSave = IncomingValue;
    
            // Insert into database
    
            return "Success";
        }
    }
    

    形式:

    DataAccess access = new DataAccess();
    
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        access.IncomingValue = textBox1.Text;
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(access.SaveToDatabase());
    }
    

    另外,我建议您使用Parametrized Query。这将为您提供更多可读性,并使您免于SQL注入和混淆。