Команда удаления SQL? - PullRequest
5 голосов
/ 20 июня 2011

У меня проблемы с простым оператором DELETE в SQL с неожиданными результатами, кажется, что слово добавляется в список ??.Должно быть что-то глупое!но я не вижу, пробовал несколько разных способов.Все таки результат так совсем запутал.

public void IncludeWord(string word)
{
    // Add selected word to exclude list
    SqlConnection conn = new SqlConnection();
    String ConnectionString = "Data Source = dev\\SQLEXPRESS ;" + "Initial Catalog=sml;" + "User id=** ;" + "Password =*;" + "Trusted_Connection=No";

    using (SqlConnection sc = new SqlConnection(ConnectionString))
    {
        try
        {
            sc.Open();

            SqlCommand Command = new SqlCommand(
               "DELETE FROM excludes WHERE word='@word'" +
                 conn);


           Command.Parameters.AddWithValue("@word", word);  
            Command.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            Box.Text = "SQL error" + e;
        }
        finally
        {
           sc.Close();
        }
        ExcludeTxtbox.Text = "";

       Box.Text = " Word : " + word + " has been removed from the Exclude List";

        ExcludeLstBox.AppendDataBoundItems = false;
        ExcludeLstBox.DataBind();
    }

Ответы [ 6 ]

17 голосов
/ 20 июня 2011

Попробуйте удалить одинарные кавычки.Кроме того, почему вы объединяете свою строку SQL с объектом соединения (.. word='@word'" + conn) ???

Попробуйте так:

try
{
    using (var sc = new SqlConnection(ConnectionString))
    using (var cmd = sc.CreateCommand())
    {
        sc.Open();
        cmd.CommandText = "DELETE FROM excludes WHERE word = @word";
        cmd.Parameters.AddWithValue("@word", word);  
        cmd.ExecuteNonQuery();
    }
}
catch (Exception e)
{
    Box.Text = "SQL error" + e;
}
...

Обратите внимание, что, поскольку соединение заключено в использованиеблокировать, вам не нужно закрывать его в операторе finally.Метод Dispose автоматически вызывает метод .Close, который возвращает соединение с пулом соединений ADO.NET, чтобы его можно было повторно использовать.

Еще одно замечание: этот метод IncludeWord делает многое.Он отправляет SQL-запросы для удаления записей, обновляет некоторые текстовые поля в графическом интерфейсе и связывает некоторые методы lists =>, которые должны быть разделены таким образом, чтобы у каждого метода была своя конкретная ответственность.В противном случае этот код просто кошмар с точки зрения обслуживания.Я очень настоятельно рекомендую вам написать методы, которые выполняют только одну конкретную задачу, в противном случае код быстро превращается в полный беспорядок.

3 голосов
/ 20 июня 2011
SqlCommand Command = new SqlCommand(
                   "DELETE FROM excludes WHERE word='@word'" +
                     conn);

следует заменить на

SqlCommand Command = new SqlCommand(
                   "DELETE FROM excludes WHERE word='@word'",
                     conn);

Также попробуйте удалить одинарные кавычки в соответствии с рекомендациями других, подобных этому

SqlCommand Command = new SqlCommand(
                   "DELETE FROM excludes WHERE word=@word",
                     conn);
1 голос
/ 20 июня 2011

@Word не должно быть в кавычках в запросе sql.

Не уверен, почему вы пытаетесь добавить соединение в конце запроса sql.

0 голосов
/ 03 апреля 2018

String queryForUpdateCustomer = "ОБНОВЛЕНИЕ клиента SET cbalance = @ txtcustomerblnc WHERE cname = '" + searchLookUpEdit1.Text + "'"; пытаться { использование (команда SqlCommand = новый SqlCommand (queryForUpdateCustomer, con)) {

                command.Parameters.AddWithValue("@txtcustomerblnc", txtcustomerblnc.Text);


                con.Open();
                int result = command.ExecuteNonQuery();

                // Check Error
                if (result < 0)
                    MessageBox.Show("Error");

                MessageBox.Show("Record Update of Customer...!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                con.Close();

                loader();
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            con.Close();
        }
0 голосов
/ 02 ноября 2015

private void button4_Click (отправитель объекта, EventArgs e) {String st = "УДАЛИТЬ ИЗ ПОСТАВЩИКА, ГДЕ supplier_id =" + textBox1.Text;

        SqlCommand sqlcom = new SqlCommand(st, myConnection);
        try
        {
            sqlcom.ExecuteNonQuery();
            MessageBox.Show("delete successful");
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }


    private void button6_Click(object sender, EventArgs e)
    {
        String st = "SELECT * FROM supplier";

        SqlCommand sqlcom = new SqlCommand(st, myConnection);
        try
        {
            sqlcom.ExecuteNonQuery();
            SqlDataReader reader = sqlcom.ExecuteReader();
            DataTable datatable = new DataTable();
            datatable.Load(reader);
            dataGridView1.DataSource = datatable;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
0 голосов
/ 20 июня 2011

Чтобы отладить это, изучите CommandText объекта SqlCommand. Прежде чем читать дальше, попробуйте это.

Проблема заключается в добавлении одинарных кавычек вокруг параметризованной строки. Удалите одинарные кавычки и жизнь прекрасна. : -)

О, и ваш коннект - это объект и ему нужна запятая, а не +.

...