Редактировать с помощью C # и MS доступа - PullRequest
0 голосов
/ 07 октября 2011

У меня проблема, я попробовал этот код:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand("UPDATE tbl_Fullname SET Firstname=@firstn,Lastname=@lastn,Middlename=@midn WHERE fnID=@idn", conn);

        cmd.Parameters.Add("@idn", OleDbType.VarChar).Value = textBox5.Text;
        cmd.Parameters.Add("@firstn", OleDbType.VarChar).Value = textBox1.Text;
        cmd.Parameters.Add("@lastn", OleDbType.VarChar).Value = textBox2.Text;
        cmd.Parameters.Add("@midn", OleDbType.VarChar).Value = textBox3.Text;
        cmd.ExecuteNonQuery();
        conn.Close();
    }

ошибки не было, но когда я проверял свой доступ к БД, ничего не изменилось.

это точный код дляОбновление и редактирование?

вот весь мой код:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {

    }

    private void button3_Click(object sender, RoutedEventArgs e)
    {

        OleDbCommand cmd = new OleDbCommand("INSERT INTO tbl_Fullname (Lastname,Firstname,Middlename) VALUES (@first,@last,@midn)",conn);

        conn.Open();
        cmd.Parameters.Add("@first", OleDbType.VarChar).Value = textBox1.Text;
        cmd.Parameters.Add("@last", OleDbType.VarChar).Value = textBox2.Text;
        cmd.Parameters.Add("@midn", OleDbType.VarChar).Value = textBox3.Text;
        cmd.ExecuteNonQuery();
        conn.Close();
    }

    private void textBox4_TextChanged(object sender, TextChangedEventArgs e)
    {
        conn.Open();
        OleDbCommand cmd2 = new OleDbCommand("SELECT fnID,Lastname,Firstname,Middlename FROM tbl_Fullname WHERE fnID= @id", conn);


        cmd2.Parameters.Add("@id", OleDbType.VarChar).Value = textBox4.Text;
        try
        {
            OleDbDataReader dr = cmd2.ExecuteReader();
            if (dr.Read())
            {
                textBox1.Text = dr[1].ToString();
                textBox2.Text = dr[2].ToString();
                textBox3.Text = dr[3].ToString();
                textBox5.Text = dr[0].ToString();

            }
            else
            {
                MessageBox.Show("No result");
            }

        }
        catch (Exception ex)
        {


            MessageBox.Show(ex.Message);
        }
        conn.Close();

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand("UPDATE tbl_Fullname SET Firstname=@firstn,Lastname=@lastn,Middlename=@midn WHERE fnID=@idn", conn);

        cmd.Parameters.Add("@idn", OleDbType.VarChar).Value = textBox5.Text;
        cmd.Parameters.Add("@firstn", OleDbType.VarChar).Value = textBox1.Text;
        cmd.Parameters.Add("@lastn", OleDbType.VarChar).Value = textBox2.Text;
        cmd.Parameters.Add("@midn", OleDbType.VarChar).Value = textBox3.Text;
        cmd.ExecuteNonQuery();
        conn.Close();
    }
}

}

Я надеюсь, что кто-то может мне помочь.мне это очень нужнозаранее спасибо.

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

MSDN говорит:

Поставщик OLE DB .NET не поддерживает именованные параметры для передачи параметров в оператор SQL или хранимую процедуру, вызываемую OleDbCommand, когда для CommandType установлено значение Text.В этом случае необходимо использовать заполнитель вопросительного знака (?).Например:

SELECT * FROM Customers WHERE CustomerID =?

Следовательно, порядок, в котором объекты OleDbParameter добавляются в OleDbParameterCollection, должен непосредственно соответствовать позиции заполнителя вопросительного знака для параметра.в тексте команды.

Сделайте так:

 private void button1_Click(object sender, RoutedEventArgs e)
    {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand("UPDATE tbl_Fullname SET Firstname=?,Lastname=?,Middlename=? WHERE fnID=?", conn);

        cmd.Parameters.Add("@firstn", OleDbType.VarChar).Value = textBox1.Text;
        cmd.Parameters.Add("@lastn", OleDbType.VarChar).Value = textBox2.Text;
        cmd.Parameters.Add("@midn", OleDbType.VarChar).Value = textBox3.Text;
        cmd.Parameters.Add("@idn", OleDbType.VarChar).Value = textBox5.Text;
        cmd.ExecuteNonQuery();
        conn.Close();
    }

Обратите внимание, что порядок параметров здесь важен!

0 голосов
/ 07 октября 2011

Добавьте try / catch вокруг вашего SQL и выведите исключение sqlCommand.

Также смотрите эту ссылку http://idealprogrammer.com/net-languages/code-samples/sql-command-update-statement-source-code/ Я нашел, где вы можете увидеть, как вставлять, обновлять и т. Д.должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...