C#:如何将数据插入数据库?

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

我想将列表框中的选定项从表单1添加(删除)到sql server。我有三个表单。我单击表单1中的添加按钮,表单2打开,出现一个文本框和保存按钮来添加数据。它从表单1中的文本框调用。代码没有给出错误,但数据库中没有发生任何事情。 我看不出问题所在。代码如下

表格1:

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