0

Я разрабатываю приложение базы данных на C# .NET и SQL Server 2012. Некоторые из моих операторов SQL работают некорректно. Когда я выполняю код, он не дает никаких ошибок. Но когда я пытаюсь что-то удалить или обновить запись, я этого не делаю. Код находится ниже:SQL Query Command не работает, но не дает ошибку SQL Server

public void updateFinalTable() 
    { 
     DialogResult result = MessageBox.Show("Please make sure no fields are empty or they will get changed. \n\t\t Do you want to continue?", 
     "Important Note", 
     MessageBoxButtons.YesNo); 
     if (result == DialogResult.Yes) 
     { 
      try 
      { 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString); 

       con.Open(); 
       SqlCommand cmd = new SqlCommand("UPDATE fianlTable SET AccountNumber='" + textBox1.Text + "', Date='" + dateTimePicker1.Value.ToString("MM/dd/yyyy") + "', CustomerName='" + textBox3.Text + "' , Debit='" + txtDebit.Text + "', Credit='" + txtCredit.Text + "', Balance='" + txtBalance.Text + "' WHERE Id LIKE '" + textBox4.Text + "' ", con); 
       cmd.ExecuteNonQuery(); 
       this.fianlTableBindingSource.AddNew(); 
       DataTable dt = new DataTable(); 
       SqlDataAdapter sda = new SqlDataAdapter("select * from fianlTable WHERE (UserName LIKE '" + LoginSession.UserID + "')", con); 

       sda.Fill(dt); 
       dataGridView1.DataSource = dt; 
       refresh(); 
       con.Close(); 

       MessageBox.Show("Record Updated Successfully!"); 

      catch (Exception) 
      { 
       MessageBox.Show("Record Could Not be updated...! "); 
      } 
     } 
    } 

Как в случае операции удаления. Оба кода не дают ошибок, но внутри базы данных изменений не наблюдается.

+0

Возможно, запрос работает нормально, а не «ударяет» по строке - это может быть вызвано неправильным идентификатором в запросе? Я не могу не заметить пробел в конце quey: 'textBox4.Text +" '"' - вы пытались удалить его? – Andersnk

+5

[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединить свои SQL-заявления - использовать ** параметризованные запросы ** вместо этого, чтобы избежать SQL-инъекции –

+0

, потому что ваши запросы WHERE не влияют на запросы. Отладка вашего приложения и извлечение сконструированного T-SQL до этого передается на сервер. Затем вручную выполните SQL в SSMS, чтобы доказать, что он не влияет на записи и вы видите свою ошибку в SQL, создаваемом вашим кодом. Вы должны использовать параметризованные procs в любом случае, IMO. –

ответ

1

Вы использовали Like в своем месте, а не =. Так что ваш код должен быть, как это -

SqlCommand cmd = new SqlCommand("UPDATE fianlTable SET AccountNumber='" + textBox1.Text + "', Date='" + 
dateTimePicker1.Value.ToString("MM/dd/yyyy") + "', CustomerName='" + 
textBox3.Text + "' , Debit='" + txtDebit.Text + "', Credit='" + 
txtCredit.Text + "', Balance='" + txtBalance.Text + 
"' WHERE Id = '" + textBox4.Text + "' ", con); 

ВНИМАНИЕ Этот тип запроса потенциально может привести к SQL-инъекции. Вам лучше пойти с параметризованными запросами, например:

string qry = = "UPDATE fianlTable SET AccountNumber = @accnt, CustomerName = @cname Where ID = @id)"; 

SqlCommand cmd = new SqlCommand(qry, con); 
cmd.Parameters.AddWithValue("@accnt", textBox1.Text); 
cmd.Parameters.AddWithValue("@cname", textBox3.Text); 
cmd.Parameters.AddWithValue("@id", textBox4.Text); 
cmd.ExecuteNonQuery(); 
+0

Вы должны проверить [Можем ли мы остановить использование AddWithValue() уже?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) и перестать использовать '.AddWithValue()' - это может привести к неожиданным и неожиданным результатам ... –

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