簡體   English   中英

C#:如何將數據插入數據庫?

[英]C#: How to Insert data into database?

我想將列表框中的選定項從Form1添加(刪除)到sql server。我有三個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();
}

您無法參數化列。 您只能參數化您的值。

這就是為什么你不能寫;

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

實際上,您可以使用,這是C#的有效語法,但不是有效的SQL。 如果您真的對列進行參數化,請看一下動態SQL。

而且您沒有在Form2執行SqlCommand

在Form2中沒有對ExecuteNonQuery調用。 但是,正如@SonerGönül在回答中也指出的那樣,運行命令將導致其他錯誤,因為您無法直接在字符串中包含文本框。 您必須將查詢更改為:

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

請注意,您必須絕對確保TextBox不包含危險的SQL內容,因為這可能導致SQL注入攻擊。 您應該重新考慮是否需要動態識別列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM