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

时间:2014-02-18 15:16:45

标签: c# sql-server-2012

我想将列表框中的选定项目从Form1添加(删除)到sql server.I有三个Forms.Wenn我单击Form1中的添加按钮,打开Form2,然后出现一个文本框和保存按钮添加数据。来自Form1中的文本框。代码不会出错,但数据库中没有任何反应。 我看不出问题。代码如下。

FORM1:

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;                                                                  
}

FORM2:

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();
}

2 个答案:

答案 0 :(得分:2)

您无法参数化列。您只能参数化您的值。

这就是你不能写的原因;

cmd.CommandText = @"SELECT @textBox1 FROM Ana";
cmd.Parameters.AddWithValue("@textBox1", textBox1.Text);

实际上你可以,这是C#的有效语法,但它不是有效的SQL。如果确实参数化了您的列,请查看dynamic SQL.

您没有在SqlCommand中执行Form2

答案 1 :(得分:0)

Form2中没有调用ExecuteNonQuery。但是,正如@SonerGönül在其answer中所述,运行该命令将导致其他错误,因为您无法直接在字符串中包含文本框。您必须将查询更改为:

cmd.CommandText = @"INSERT INTO Ana(" + f1.textBox1.Text + ") VALUES(@p1)";

请注意,您必须绝对确保TextBox不包含危险的SQL内容,因为这可能会导致SQL注入攻击。您应该重新考虑是否需要动态识别列。