我正在尝试将我的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();
}
}
答案 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
值,您需要执行以下操作:
property
class
textbox
)TextChanged
值分配属性
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());
}
另外,我建议您使用Parametrized Query。这将为您提供更多可读性,并使您免于SQL注入和混淆。