30/09/2018, 17:36

Anh/chị giúp em lỗi UPDATE trong C# với ạ!

Em có làm form thêm, sửa, xóa trong C#.

Code:

private void btnSave_Click(object sender, EventArgs e)
{
    if (txtFirstName.Text == "")
    {
        MessageBox.Show("Đề nghị nhập First Name", "Thông báo ..."); return;
    }
    if (txtLastName.Text == "")
    {
        MessageBox.Show("Đề nghị nhập Last Name", "Thông báo ..."); return;
    }
    if (modeNew)
    {
        string sSql = "INSERT INTO Authors(FirstName, LastName) VALUES " +
        "(N'" + txtFirstName.Text + "',N'" + txtLastName.Text + "')";
        mySqlCommand = mySqlConnection.CreateCommand();
        mySqlCommand.CommandText = sSql;
        mySqlCommand.ExecuteNonQuery();
    }
    else
    {
        string AuthorID = listView1.SelectedItems[0].SubItems[0].Text;
        string sSql = "UPDATE Authors" +
        "SET FirstName = N'" + txtFirstName.Text + "'," +
        "LastName = N'" + txtLastName.Text + "'" +
        "WHERE AuthorID = " + AuthorID;
        //mySqlCommand = new SqlCommand(sSql, mySqlConnection);
        mySqlCommand = mySqlConnection.CreateCommand();
        mySqlCommand.CommandText = sSql;
        mySqlCommand.ExecuteNonQuery();
    }
    SetControls(false);
    Display();
}

Chức năng thêm mới và xóa thì đã chạy được và lưu được vào cơ sở dữ liệu rồi. Còn chức năng sửa thì nó cứ báo lỗi này: Incorrect syntax near 'FirstName' tại dòng mySqlCommand.ExecuteNonQuery();.
Em đang tìm hiểu nên trình đang non, sữa mãi mà cụng không biết lỗi thế nào, code hình như em thấy đúng rồi mà nó cứ báo lỗi em không hiểu sao
if(modeNew) là thêm mới thì ok rồi ạ. còn

else {
    string AuthorID = listView1.SelectedItems[0].SubItems[0].Text;
    string sSql = "UPDATE Authors" +
    "SET FirstName = N'" + txtFirstName.Text + "'," +
    "LastName = N'" + txtLastName.Text + "'" +
    "WHERE AuthorID = " + AuthorID;
                //mySqlCommand = new SqlCommand(sSql, mySqlConnection);
    mySqlCommand = mySqlConnection.CreateCommand();
    mySqlCommand.CommandText = sSql;
    mySqlCommand.ExecuteNonQuery();
}

Thì nó không lưu được khi mình nhấn nút Save mà báo lỗi ở trên ạ.
Em copy đoạn code

UPDATE Authors
SET FirstName = N'Huu',
LastName = N'Thuc'
WHERE AuthorID = 25

vào chạy trong sql server thì cập nhật sửa thành công.
Mong anh/chị xem hộ em với.

vũ xuân quân viết 19:48 ngày 30/09/2018

đưa lỗi exception của đoạn update lên, chụp luôn câu sql khi chạy debug lên đây.
code thì không lỗi nên không biết như thế nào

Huu Thuc viết 19:37 ngày 30/09/2018

@masoivn


Anh xem giúp ạ.

vũ xuân quân viết 19:50 ngày 30/09/2018

cú pháp câu sql update thường

update table set item1 = 'a' where id='b'

nên anh nghĩ câu sql bị sai.

update table set item1 = N'a' where id='b'

không biết sao mà câu sql của em chạy trong sql server không bị lỗi.
sai chỗ N
item1= N’a’

Nguyen Ca viết 19:50 ngày 30/09/2018

Đoán là bị dính chữ đó, nên có dấu cách "UPDATE Authors "

Huu Thuc viết 19:47 ngày 30/09/2018

UPDATE Authors SET FirstName = N'Huu1', LastName = N'Thuc1' WHERE AuthorID = 25
Em vừa chạy lại trong sql vẫn được đó a @masoivn. Em chỉ thắc mắc 1 cái là chạy trong sql thì chạy được mà chạy code trong c# thì báo cái lỗi mà em đang hỏi đó ạ. Sửa hoài chẳng biết thế nào.

vũ xuân quân viết 19:37 ngày 30/09/2018

coi kỹ lại thì giống ý bạn @nguyenhuuca
chữa
set dính vào authors

Huu Thuc viết 19:51 ngày 30/09/2018

"UPDATE Authors SET FirstName = N'" + txtFirstName.Text + "'," +"LastName = N'" + txtLastName.Text + "'" +"WHERE AuthorID = " + AuthorID;
Em để lại 1 hàng dài thế này trong code thì chạy được rồi. ạ. Lúc nãy em để UPDATE 1 hàng, SET 1 hàng, WHERE 1 hàng thì không được, chắc do lỗi dấu cách hay lỗi gì đó. chứ UPDATE với Authors em kiểm tra mấy lần rồi vẩn không dính nhau.
Cảm ơn 2 anh @masoivn @nguyenhuuca nhiều ạ .

vũ xuân quân viết 19:46 ngày 30/09/2018

em bị lỗi sai cú pháp giống như câu thông báo lỗi.
em coi lại câu sql trên hình trên sẽ thấy là chữ set bị dính với chữa authors.
lỗi này thường gặp đối với lập trình viên khi ghép chuỗi trong câu sql từ insert, update và delete.
anh cũng hay bị.

Huu Thuc viết 19:46 ngày 30/09/2018

Dạ em hiểu rồi ạ, em cụng hiểu câu thông báo nó nói lỗi cú pháp rồi mà em mò mãi không ra, may mà post lên đây có các anh chỉ dẫn. Em rút kinh nghiệm code ở những đoạn sau.

Nguyen Ca viết 19:45 ngày 30/09/2018

Em nên dùng StringBuilder nhé, tốt hơn khi ghép chuỗi.

Huu Thuc viết 19:47 ngày 30/09/2018

Em chưa hiểu nhiều kĩ thuật lắm vì đang mới tìm hiểu a @nguyenhuuca. Em đang thấy trang sau có nói dùng thủ tục, chắc không phải ghép chuổi, nhưng mới học em cứ ghép chuỗi như thế đã. chứ StringBuilder mà anh nói em chưa biết. Hic.

vũ xuân quân viết 19:47 ngày 30/09/2018

em lên google tìm với từ khóa “C# StringBuilder” là ra thôi.
tài liệu của mircosoft viết tốt, đọc dễ hiểu, dễ tham khảo.
em nên thử với hàm đó.

Huu Thuc viết 19:46 ngày 30/09/2018

Dạ em mới học nên em học cái cơ bản theo giáo trình họ dạy đã ạ, tại giờ em tự mày mò không ai hướng dẫn nên cụng hơi khó. Tài liệu tiếng anh thì biết 1 chút đã rồi em mới đọc chứ trình tiếng anh của em cụng hơi non ạ.
Anh @nguyenhuuca @masoivn sẵn topic này cho em hỏi luôn là giờ đi làm thì họ dùng lập trình LINQ to SQL LINQ to Entities ạ. Cái em đang học là ADO.NET. Thấy 2 cái trên họ nói ở chương phía sau.

vũ xuân quân viết 19:39 ngày 30/09/2018

anh nghĩa tùy theo yều câu của dự án thì người ta sẽ áp dụng. Nên không biết trước được.

Nguyen Ca viết 19:44 ngày 30/09/2018

anh làm java em ơi, bỏ .net lâu rồi, nên cũng không biết

Huu Thuc viết 19:50 ngày 30/09/2018

Dạ cám ơn 2 anh, thôi em cứ cày cuốc cho biết cơ bản đã rồi tính tiếp.

Bài liên quan
0