对类使用文本框值
本文关键字:文本 | 更新日期: 2023-09-27 18:33:36
我正在尝试将我的文本框值从另一个窗体到类将项目插入到我的数据库中。我尝试创建 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();
}
}
当您实例化Form1()
对象的新实例时,您假设新实例的"描述、品牌、型号、颜色和数量"TextBox's
包含文本?TextBox.Text
的默认值是其string
属性类型的默认值 null
。
理想情况下,您将从表单实例中获取用户填充的值,然后将它们传递到数据库中,如下所示:
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
。
不可以,您不能通过创建新实例来访问class
中的Form1
值。要访问textbox
值,您需要执行以下操作:
- 在
class
中创建公共property
- 在某些适当的事件(如
TextChanged
)中分配具有textbox
值的属性 - 访问类中的属性以获取
textbox
值并将其保存到数据库。
例
类:
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());
}
另外,我建议您使用参数化查询。这将为您提供更多的可读性,并使您免于SQL注入和混乱。