2014-02-18 9 views
1

Я хочу добавить (удалить) выбранные элементы в списке из Form1 в sql server.I есть три формы. Wenn Я нажимаю кнопку добавления в Form1, Form2 открывается и появляется текстовое поле и кнопка сохранения, чтобы добавить данные. Это вызовы из текстового окна в Form1.Код не дает ошибки, но ничего не происходит в базе данных. Я не вижу проблемы. Код ниже.C#: Как вставить данные в базу данных?

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

После того как вы настроили инструкцию 'INSERT' как' cmd', вам также необходимо ** выполнить ** эту инструкцию! Запустите 'cmd.ExecuteNonQuery(); после добавления значения параметра (но перед показом' MessageBox') на самом деле ** запустите ** этот SQL! –

ответ

2

Вы не можете параметризовать столбцы. Вы можете параметризовать только ваши значения.

Вот почему вы не можете писать;

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

Фактически вы можете, это допустимый синтаксис для C#, но это недействительный SQL. Если вы действительно параметризировать столбцы, посмотрите dynamic SQL.

И вы не выполнять ваши SqlCommand в вашем Form2.

0

В Форма 2 нет звонка ExecuteNonQuery. Однако, поскольку @ SonerGönül также указал в своем answer, запуск этой команды приведет к другим ошибкам, поскольку вы не можете напрямую включить текстовое поле в строку. Вы должны были бы изменить запрос:

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

Пожалуйста, обратите внимание, что вы должны быть абсолютно уверены в том, что TextBox не содержит опасных содержимого SQL, так как это может привести к атакам SQL-инъекции. Вы должны переосмыслить необходимость динамического определения столбца.

+0

Хотя я идентифицировал F2 в F1.This дает ошибку: «Невозможно использовать локальную переменную« f1 »до ее объявления. Объявление локальной переменной скрывает это поле». открытый частичный класс Form1: Форма {public Form2 f2; public Form3 f3; public Form1() { InitializeComponent(); f2 = новый Form2(); f3 = новый Form3(); f2.f1 = this; f3.f1 = this; } public partial class Form2: Форма {public Form1 f1; } – user3318923

+0

@ user3318923: В конце вашего метода 'button1_Click' в Form2 вы объявляете локальную переменную' f1' в этой строке: 'Form1 f1 = new Form1();'. Это скрывает уже существующую переменную f1 на уровне класса. Я подозреваю, что вы можете удалить строку 'Form1 f1 = new Form1();' безопасно, потому что у вас уже есть 'f1' на уровне класса. – Markus

Смежные вопросы