Vấn đề tiếng việt trong SQLServer
Vấn đề
Trong ô textbox trên window form. Mình muốn gõ vào dòng text (VD: NGuyễn Văn A). Khi click nút Save thì sẽ lưu chuỗi: "Nguyễn Văn A" vào field "Name" trong database rồi hiển thị chuỗi text đó lên trên 1 DataGridView. Nhưng sau khi lưu thành công, mình đọc lại từ database để hiển thị lên DataGridView thì nó lại ra thành: "NGuy?n V?n A".
Giải quyết
Đấy là chuỗi khi Insert của bạn chưa được mã háo theo chuẩn Database ( thường là UTF-8 ).
Có 2 cách dành cho bạn:
Cách 1: Dùng trực tiếp ở câu lệnh sql
Đấy là chuỗi khi Insert của bạn chưa được mã háo theo chuẩn Database ( thường là UTF-8 ).
Có 2 cách dành cho bạn:
Cách 1: Dùng trực tiếp ở câu lệnh sql
Để có thể chèn chuỗi theo chuẩn UTF-8 thì ngay trong câu lệnh SQL bạn phải thêm N trước chuỗi cần hiển thị đúng UTF-8.
Ví dụ:
INSERT INTO tblSinhvien(masv,hoten) VALUES('0854040046',N'Ngô Khánh');
UPDATE tblSinhvien SET hoten=N'Ngô Duy Khánh' WHERE masv='0854040046';
Cách 2: Dùng Store Procedure của sql
Dùng cách truyền dữ liệu theo tham số sẽ đảm bảo dữ liệu truyền vào là không bị mất mát, bạn nhập như thế nào thì nó sẽ ghi vào csdl như thế.
Ví dụ:
Trong Sql Server bạn tạo ra 1 store procedure như sau:
CREATE PROCEDURE InsertSV
@masv nvarchar(10),
@hoten nvarchar(40)
AS
insert into tblSinhvien values(
@masv, @hoten
)
Trong C# SqlCommand bây giờ có dạng:
SqlCommand cmd = new SqlCommand(“InserSV”, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(“@masv”, masv);//biến masv chứa string có UTF-8
cmd.Parameters["@masv"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue(“@hoten”, hoten);//biến hoten chứa string có UTF-8
cmd.Parameters["@hoten"].Direction = ParameterDirection.Input;
Cách 2: Dùng Store Procedure của sql
Dùng cách truyền dữ liệu theo tham số sẽ đảm bảo dữ liệu truyền vào là không bị mất mát, bạn nhập như thế nào thì nó sẽ ghi vào csdl như thế.
Ví dụ:
Trong Sql Server bạn tạo ra 1 store procedure như sau:
CREATE PROCEDURE InsertSV
@masv nvarchar(10),
@hoten nvarchar(40)
AS
insert into tblSinhvien values(
@masv, @hoten
)
Trong C# SqlCommand bây giờ có dạng:
SqlCommand cmd = new SqlCommand(“InserSV”, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(“@masv”, masv);//biến masv chứa string có UTF-8
cmd.Parameters["@masv"].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue(“@hoten”, hoten);//biến hoten chứa string có UTF-8
cmd.Parameters["@hoten"].Direction = ParameterDirection.Input;
Cảm ơn bạn đã chia sẽ
Trả lờiXóacảm ơn bạn rất nhiều
Trả lờiXóa