Команда SQL Query не работает, но не выдает ошибку SQL Server
Я разрабатываю приложение базы данных в C#.NET и SQL Server 2012. Некоторые из моих операторов SQL не работают должным образом. Когда я выполняю код, он не выдает никакой ошибки. Но когда я пытаюсь что-то удалить или обновить запись, я этого не делаю. Код лежит ниже:
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...! ");
}
}
}
Аналогично обстоит дело с операцией удаления. Оба кода не дают ошибок, но внутри базы данных никаких изменений не наблюдается.
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();