• Thứ Hai, 17/08/2009 11:05 (GMT+7)

    Chèn chuỗi vào data base dùng C# như thế nào?

    Câu hỏi :
    Nếu thêm N trước chuỗi thì dữ liệu sẽ được lưu dưới dạng Unicode, nhưng nếu tôi lấy dữ liệu từ một file nào đó và lưu vào một biến rồi mới insert giá trị vào cơ sở dữ liệu thì ký tự N phải đặt như thế nào? Tôi dùng C#.
     

    Trả lời :
    Mức độ hỗ trợ việc truy xuất chuỗi Unicode trong các bảng của database phụ thuộc đồng thời vào 3 thành phần: ngôn ngữ lập trình được dùng, version provider truy xuất database và bản thân server database. Trong trường hợp của bạn, may mắn là cả 3 thành phần đều hỗ trợ tốt việc truy xuất database, cụ thể:

     - VC# là ngôn ngữ mới của Microsoft nên nó hỗ trợ rất tốt các chuỗi Unicode.
     - Provider truy xuất SQL Server được hiện thực trong các đối tượng .Net là SqlConnection, đây là các đối tượng .Net rất mới nên cũng hỗ trợ rất tốt các chuỗi Unicode.
     - Database Server mà bạn dùng cũng hỗ trợ rất tốt các chuỗi Unicode vì bạn đã lập trình lưu đúng được chuỗi Unicode lên database (có thể bạn đang dùng SQL Server 2000 hay mới hơn). Bạn nên dùng các kiểu dữ liệu như ntext, nchar, nvarchar cho các field chứa chuỗi Unicode.

     Thường người ta dùng các câu lệnh truy vấn SQL để truy xuất dữ liệu trong database. Trong các lệnh truy vấn SQL này, các tham số chuỗi bình thường được hiểu như là chuỗi ANSI (dạng 1 byte). Để hệ thống có thể hiểu chuỗi Unicode tiếng Việt, bạn phải thêm ký tự N trước từng tham số chuỗi Unicode. Thí dụ, nếu bạn dùng lệnh SQL "Insert into" như sau:

     //MyCommand là đối tượng sqlCommand
     MyCommand.CommandText = "INSERT INTO dsUsers VALUES('Nguyễn Văn Hiệp', 1959, "8A Lữ Gia");
     MyCommand.ExecuteNonQuery();
     để thêm 1 record mới có 3 field thông tin, trong đó 2 field hoten và diachi là chuỗi Unicode. Tuy nhiên nếu bạn viết lệnh SQL "Insert into" như trên thì chuỗi được lưu là "Nguy?n V?n Hi?p" và "8A L? Gia" chứ không phải chuỗi Unicode mà bạn miêu tả. Do đó, bạn phải viết lại đoạn code trên như sau:
     //MyCommand là đối tượng sqlCommand
     MyCommand.CommandText = "INSERT INTO dsUsers VALUES(N'Nguyễn Văn Hiệp', 1959, N'8A Lữ Gia');
     MyCommand.ExecuteNonQuery();
     thì các chuỗi Unicode mới được lưu đúng vào database. Trong trường hợp các chuỗi Unicode cần lưu đang nằm trong các biến chuỗi, bạn sẽ viết đoạn lệnh trên như sau:
     //giả sử 3 biến được gán nội dung như sau
     hoten = "Nguyễn Văn Hiệp";
     namsinh = 1959;
     diachi = "8A Lữ Gia";
     //MyCommand là đối tượng sqlCommand
     MyCommand.CommandText = "INSERT INTO dsUsers VALUES(N'" + hoten + "', " + namsinh + ", N'" + diachi + "')";
     MyCommand.ExecuteNonQuery();
     
    Chuyên mục: Cơ sở dữ liệu