C#:如何将数据插入数据库?
我想将列表框中的选定项从表单1添加(删除)到sql server。我有三个表单。我单击表单1中的添加按钮,表单2打开,出现一个文本框和保存按钮来添加数据。它从表单1中的文本框调用。代码没有给出错误,但数据库中没有发生任何事情。 我看不出问题所在。代码如下 表格1:C#:如何将数据插入数据库?,c#,sql-server-2012,C#,Sql Server 2012,我想将列表框中的选定项从表单1添加(删除)到sql server。我有三个表单。我单击表单1中的添加按钮,表单2打开,出现一个文本框和保存按钮来添加数据。它从表单1中的文本框调用。代码没有给出错误,但数据库中没有发生任何事情。 我看不出问题所在。代码如下 表格1: SqlConnection baglan = new SqlConnection(@"Server=10.34.16.219; Database=envanter; User ID=envanter; Password=Er11223
SqlConnection baglan = new SqlConnection(@"Server=10.34.16.219; Database=envanter; User ID=envanter; Password=Er112233;");
SqlCommand cmd = new SqlCommand();
public void button1_Click(object sender, EventArgs e) //from db
{
try
{
baglan.Open();
cmd.Connection = baglan;
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"SELECT @textBox1 FROM Ana";
cmd.Parameters.AddWithValue("@textBox1", textBox1.Text);
cmd.ExecuteNonQuery();
baglan.Close();
}
catch (SqlException exc)
{
MessageBox.Show(exc.Message.ToString(), "Error Message");
}
Form2 f2 = new Form2();
f2.Show();
this.Visible = false;
}
表格2:
SqlConnection baglan = new SqlConnection(@"Server=10.34.16.219; Database=envanter; User ID=envanter; Password=Er112233;");
SqlCommand cmd = new SqlCommand();
private void button1_Click(object sender, EventArgs e) //add
{
try
{
baglan.Open();
cmd.Connection = baglan;
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"INSERT INTO Ana(f1.textBox1.Text) VALUES(@p1)";
cmd.Parameters.AddWithValue("@p1", textBox1.Text);
MessageBox.Show("Inserted");
baglan.Close();
}
catch (Exception)
{
baglan.Close();
MessageBox.Show("Kayıt yapılmış!");
}
finally
{
Form2_Load(sender, e);
}
Form1 f1 = new Form1();
f1.Show();
this.Hide();
}
无法参数化列。您只能参数化您的值 这就是你不能写作的原因
cmd.CommandText = @"SELECT @textBox1 FROM Ana";
cmd.Parameters.AddWithValue("@textBox1", textBox1.Text);
实际上,这是C#的有效语法,但它不是有效的SQL。如果您真的要参数化列,请看一看
而且您没有在
表单2中执行SqlCommand
,在表单2中没有调用ExecuteNonQuery
。然而,正如@SonerGönül在他的文章中所述,运行该命令将导致其他错误,因为您不能直接将文本框包含在字符串中。您必须将查询更改为:
cmd.CommandText = @"INSERT INTO Ana(" + f1.textBox1.Text + ") VALUES(@p1)";
请注意,您必须绝对确保文本框不包含危险的SQL内容,因为这可能会导致SQL注入攻击。您应该重新考虑是否需要动态标识列 一旦您将INSERT
语句设置为cmd
,您还需要执行该语句!运行cmd.ExecuteNonQuery()
在添加参数值之后(但在显示消息框之前)实际运行该SQL!虽然我已经在F1中标识了F2。这会产生错误:“在声明局部变量'F1'之前不能使用它。局部变量的声明会隐藏该字段。”公共部分类Form1:Form{public Form2 F2;public Form3 f3;public Form1(){InitializeComponent();f2=new Form2();f3=new Form3();f2.f1=this;f3.f1=this;}公共分部类Form2:Form{public Form1 f1;}@用户3318923:在Form2中的按钮1\u单击方法的末尾,您在此行中声明了一个局部变量f1
:Form1 f1=new Form1();
。这将隐藏类级别上已经存在的变量f1。我怀疑您可以删除该行Form1 f1=new Form1()
安全,因为您已经在班级级别获得了f1
。