Announcement

Collapse
No announcement yet.

[HỎI] Trợ giúp về kiểu DateTimme trong SQL và C#

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [HỎI] Trợ giúp về kiểu DateTimme trong SQL và C#

    Hiện tại mình đang làm một cái phần mềm về quản lý học sinh. Lúc nhập ngày sinh mình dùng "mask" để lưu ngày tháng năm sinh,định dạng mask là 00/00/0000 (kiểu short date), có học sinh không biết ngày tháng năm sinh nên sẽ có trường hợp không nhập, lúc đó mask nó sẽ có giá trị mặc định là " / /".
    Trong CSDL SQL thì mình cho cột NgaySinh trong bảng HOCSINH là kiểu "DateTime"====> cho nên lúc mà mình không nhập gì ở trong cái mask thì nó sẽ lưu
    " / /" vào CSDL =====> lỗi sẽ xảy ra. Bây giờ mình không biết làm sao để cho giá trị cái ô mask là "null" khi mình không nhập ngày tháng năm sinh.
    Mình thử sử dụng cái cấu trúc
    DateaTime ngaysinh = null ; // Lỗi..... do kiểu DateTime trong C# không được null
    if(mskNgaySinh == " / /")
    ngaysinh = null;
    else
    ngaysinh = DateTime.Parse(mskDateTime.Text);
    // cau lenh insert.......

    ....nhưng không được, bạn nào giúp mình với....
    Facebook: Kiều Thắng
    Google Plus: Kiều Thắng
    Thông tin về du học các nước: Du học.


  • #2
    Thử để giá trị mặc định "00/00/0000" trong database thay vì "//" + trong code nhận "00/00/0000" tương đương ko nhập xem :-?

    Comment


    • #3
      Thiết lập giá trị tham số truyền vào câu lệnh SQL là SqlDateTime.Null thay vì dùng kiểu DateTime truyền thống. Nghĩa là
      Code:
      if (mask == "/ /")
        value = SqlDateTime.Null;
      else
        value = DateTime.Parse(mask);
      Ở đây value là biến có kiểu object
      Chưa....

      Comment


      • #4
        em đã làm như anh Chiến nói, và thử cho nó hiện trong C# nó hiện như cái messageBox phía dưới. Bây giờ có thêm một vấn đề là, kiểu DateTime trong SQL nó lưu theo định dạng hình phía trên, giờ làm sao để đồng nhất 2 định dạng này với nhau, mong anh chỉ thêm

        Last edited by 09520281; 11-02-2012, 10:31.
        Facebook: Kiều Thắng
        Google Plus: Kiều Thắng
        Thông tin về du học các nước: Du học.

        Comment


        • #5
          Originally posted by 09520281 View Post
          em đã làm như anh Chiến nói, và thử cho nó hiện trong C# nó hiện như cái messageBox phía dưới. Bây giờ có thêm một vấn đề là, kiểu DateTime trong SQL nó lưu theo định dạng hình phía trên, giờ làm sao để đồng nhất 2 định dạng này với nhau, mong anh chỉ thêm

          value = DateTime.Parse(mask).ToShortDateString();
          Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
          Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
          Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
          Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
          ...

          Comment


          • #6
            Ủa, mục đích đồng nhất là chi vậy? Khi làm việc với dạng ngày tháng giữa C# và SQL thì không nên sử dụng giá trị chuỗi mà cần sử dụng kiểu DateTime, từ đó sẽ tránh được sai sót xảy ra giữa các vùng miền, các quốc gia sử dụng định dạng ngày tháng khác nhau. Bởi vì khi chạy thì framework nó tự biết sẽ chuyển sang định dạng nào để đưa vào trong SQL Server.
            Chưa....

            Comment


            • #7
              trong C# có hỗ trợ kiểu nullable, nghĩa là cho phép chưa giá trị null.
              PHP Code:
              DateTimengay null;
              if (
              mskDateTime.Text != " / /"ngay DateTime.Parse(mskDateTime.Text); 

              Comment


              • #8
                em đã lưu được vào SQL, nhưng có một lỗi nhỏ như sau. đó là ví dụ em lưu 16/12/1990 thì bị lỗi, mà lưu từ 01-11/12/1990 thì lưu được. mấy anh có thể giúp em fix lỗi này như thế nào không. Hình như nó bị lỗi định dạng ngày tháng năm....tháng trước ngày sau thì phải
                Facebook: Kiều Thắng
                Google Plus: Kiều Thắng
                Thông tin về du học các nước: Du học.

                Comment


                • #9
                  Truyền các giá trị vào theo SqlParameter sẽ đảm bảo tránh xảy ra các sai sót như vậy. Ví dụ:
                  Code:
                  SqlCommand cmd = new SqlCommand("insert into A values(@NgaySinh, @HoTen)", connection);
                  cmd.Parameters["@NgaySinh"].Value = DateTime.Now; //truyền trực tiếp kiểu DateTime luôn chứ không phải là chuỗi
                  cmd.Parameters["@HoTen"].Value = "John Smith";
                  Cách này cũng hạn chế được Sql Injection
                  Chưa....

                  Comment


                  • #10
                    Thanks mọi người đã giúp đỡ nhé, mình đã thử test cách của anh Chiến và bạn Quynam thì thấy cách anh chiến dùng được , nó có trả về null, còn mình dùng cách bạn Nam không hiểu sao ko trả về null được, hiện giờ đã lưu được rồi. Mà em bổ sung phần dưới của anh chiến là như thế này:
                    sqlCommand2.Parameters.Add(new SqlParameter("@MaHocSinh", SqlDbType.VarChar, 50));
                    sqlCommand2.Parameters["@MaHocSinh"].Value = txtMaHocSinh.Text;
                    Hình như anh thiếu cái Add New
                    Facebook: Kiều Thắng
                    Google Plus: Kiều Thắng
                    Thông tin về du học các nước: Du học.

                    Comment

                    LHQC

                    Collapse
                    Working...
                    X