2013-12-08 4 views
0

Я попробовал следующий код для сохранения в базе данных. Условие есть, у меня есть значение в выпадающем списке, а значения - New = 1, а old = 2. Если пользователь выбирает 1 или новый, тогда он будет сохранять данные в базу данных или, если они выбирают старый, тогда он будет отображать существующие данные.Почему данные не сохраняются в базе данных?

Теперь на этот раз моя метка показывает введенные данные, но данные не сохраняются в таблице (но не отображается никаких ошибок).

protected void btnsave_Click(object sender, EventArgs e) 
     { 
      if (ddl.Text=="1") 
      { 
       cs.Open(); 
       string query = "insert into resig (@id,@name,@email) values('"+txtgn.Text+"','"+txtgname.Text+"','"+txtsg.Text+"')"; 
       SqlCommand cmd = new SqlCommand(query,cs); 
       lbdmsg.Text = "Data Inserted"; 

       //txtgname.Text = ddl.SelectedItem.ToString(); 

      } 
      else 
      { 
       cs.Open(); 
       string query = "select name, email from resig where id='" + txtgn + "'"; 
       SqlCommand cmd= new SqlCommand(query,cs); 
       dr =cmd.ExecuteReader(); 
       while(dr.Read()) 
       { 
        string name= txtgname.Text; 
        string email=txtsg.Text; 
       } 
       cs.Close(); 
      } 
     } 
+1

Вы не выполнили команду ... – Mauro

ответ

3

Я вижу 2 вещи;

  • Вы пытаетесь параметризовать имена столбцов, а не ваши значения.
  • Вы не выполняете команду вставки с помощью ExecuteNonQuery().

Вы должны использовать parameterized queries. Этот тип конкатенаций строк открыт для атак SQL Injection.

Например,

if (ddl.Text == "1") 
{ 
    string query = "insert into resig (id,name,email) values(@id, @name, @email)"; 
    SqlCommand cmd = new SqlCommand(query,cs); 
    cmd.Parameters.AddWithValue("@id", txtgn.Text); 
    cmd.Parameters.AddWithValue("@name", txtgname.Text); 
    cmd.Parameters.AddWithValue("@email", txtsg.Text); 
    cs.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

после редактирования кода моя таблица базы данных получает данные в таблицу, но выбор данных из базы данных id = '"+ id.Text +"' ничего не показывает ... – MNAH

+0

@MNAH Я не вижу в вашем коде 'id.Text'. Может быть, вы должны задать его как другой вопрос .. –

+0

извините, босс должен быть id = '"+ txtgn +"' " – MNAH

1

Вызов cmd.ExecuteNonQuery() выполнить команду на вашем дб

1

Ваш SQL является неправильной, и очень опасно/восприимчивыми к SQL инъекции. Первый список в скобках должен быть список столбцов, и список значений должны быть параметры, чтобы избежать инъекции SQL:

string query = "insert into resig (id, name, email) values(@id, @name, @email)"; 
SqlCommand cmd = new SqlCommand(query, cs); 
cmd.Parameters.Add(new SqlParameter("@id", txtgn.Text)); 
cmd.Parameters.Add(new SqlParameter("@name", txtgname.Text)); 
cmd.Parameters.Add(new SqlParameter("@email", txtsg.Text)); 
cmd.ExecuteNonQuery(); 

Вы должны параметризовать оператор выбора, а также. Почему это важно? Рассмотрим полученный SQL, если пользователь ввел это для id и выбрал старый:

'; удалить resig; -

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

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