Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 15 kết quả

Đề tài: Lỗi không thể thực thi câu lệnh trong lập trình CSDL bằng Stored procedure

  1. #1
    Ngày gia nhập
    12 2009
    Bài viết
    87

    Mặc định Lỗi không thể thực thi câu lệnh trong lập trình CSDL bằng Stored procedure

    Chào các bạn, mình đang bị dính phải một cái lỗi làm mình cảm thấy rất khó hiểu. Hiện tại mình đang làm phần mềm quản lý gara oto. Mình chọn mô hình 3 lớp cùng với kỹ thuật lập trình csdl bằng stored procedure để làm phần mềm này. Tuy nhiên trong lúc làm thì mình gặp phải một lỗi như sau:
    - Ở formHieuXe (Hiệu xe) thì các button như thêm, xóa, sửa mình làm rất ok -> ko sai gì cả. Nhưng khi qua một form khác cũng với những dòng code tương tự ở frmHieuXe thì nó lại chạy không được.

    Dưới đây là code mẫu cho phần thêm vào csdl bằng stored procedure ở frmHieuXe.
    Visual C# Code:
    1.         private void btnThem_Click(object sender, EventArgs e)
    2.         {
    3.             m_hieuXeBLL.Insert(txtHieuXe.Text, txtGhiChu.Text);
    4.             frmHieuXe_Load(sender, e);
    5.             // Gán các input bằng chuỗi trống
    6.             ClearInput();
    7.         }
    Code bên class HieuXeBLL
    Visual C# Code:
    1.         public void Insert(string hieuXe, string ghiChu)
    2.         {
    3.             try
    4.             {
    5.                 // mở kết nối CSDL
    6.                 dal.OpenConnection(m_conn);
    7.                 // thiết lập thông số cho SqlCommand
    8.                 m_cmd = new SqlCommand("HieuXe_Insert", m_conn);
    9.                 m_cmd.CommandType = CommandType.StoredProcedure;
    10.                 // các đối số
    11.                 m_cmd.Parameters.Add("@HieuXe", SqlDbType.Char).Value = hieuXe;
    12.                 m_cmd.Parameters.Add("@GhiChu", SqlDbType.NVarChar).Value = ghiChu;
    13.                 // thực thi câu truy vấn
    14.                 m_cmd.ExecuteNonQuery();
    15.             }
    16.             catch { }
    17.             finally
    18.             {
    19.                 // đóng kết nối và xóa dữ liệu tạm
    20.                 dal.CloseConnection(m_conn);
    21.                 m_dt.Dispose();
    22.             }
    23.         }
    Như mình đã nói bên trên, mình đã áp dụng đoạn code ở một số form thì có form chạy dc, có form chạy không dc, bấm vô nó trơ như đá.

    Xin lưu ý các bạn là về code trong tầng BLL và trong form thì nội dung giống y như nhau, nó chỉ khác nhau về tham số truyền vào là tên các biến và tên stored procedure. Mình đã xem đi xem lại khá kỹ và chả thấy có sai sót gì so với frmHieuXe và HieuXeBLL.
    Bạn nào biết cách giải quyết cho trường hợp của mình thì hướng dẫn cho mình.

    Xin cảm ơn.

  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    173

    trong catch bạn nên đặt Exception để dễ xử lý, còn việc bạn hủy kết nối trước dataTable thì không nên
    Mobilis in mobile

  3. #3
    Ngày gia nhập
    10 2010
    Bài viết
    35

    Có nhiều vấn đề phát sinh kể cả khi bạn code đúng:
    - Proc của bạn thế nào - sai hay đúng? Không thấy post lên
    - Tham số truyền vào có null hay không
    - Số lượng tham số truyền vào có đúng không?
    - Bạn phải cung cấp đầy đủ mọi thông tin, thì mọi người sẽ dễ giải quyết giúp bạn hơn

  4. #4
    Ngày gia nhập
    08 2009
    Nơi ở
    C:\Documents and Settings\ME\My Documents\Visual Studio 2010
    Bài viết
    516

    Bạn trình bày thêm các biến và khai báo, khởi tạo chúng ở đoạn nào nữa chứ nói thế này chưa lần ra đc.

  5. #5
    Ngày gia nhập
    12 2009
    Bài viết
    87

    Trích dẫn Nguyên bản được gửi bởi toi_xau Xem bài viết
    Có nhiều vấn đề phát sinh kể cả khi bạn code đúng:
    - Proc của bạn thế nào - sai hay đúng? Không thấy post lên
    - Tham số truyền vào có null hay không
    - Số lượng tham số truyền vào có đúng không?
    - Bạn phải cung cấp đầy đủ mọi thông tin, thì mọi người sẽ dễ giải quyết giúp bạn hơn
    Đây:
    Insert
    Code:
    ALTER PROCEDURE HieuXe_Insert
    	@HieuXe char(20),
    	@GhiChu nvarchar(100)
    AS
    	BEGIN
    		insert into HIEUXEs values(@HieuXe,@GhiChu)
    	END
    Update:
    Code:
    ALTER PROCEDURE HieuXe_Update
    	@HieuXe char(20),
    	@GhiChu nvarchar(100)
    AS
    	BEGIN
    		update HIEUXEs set GhiChu = @GhiChu where HieuXe = @HieuXe
    	END
    Delete
    Code:
    ALTER PROCEDURE HieuXe_Delete
    	@HieuXe char(20)
    AS
    	BEGIN
    		delete from HIEUXEs where HieuXe = @HieuXe
    	END
    Vì số lượng stored procedure rất nhiều nên mình ko post lên hết dc. Thế nhưng tất cả các stored procedure đối với các table khác đều có cấu trúc giống như trên. Như mình đã nói bên trên thì việc truyền tham số vào mình đã xem khá kỹ xem có truyền sai kiểu dữ liệu, thiếu hay thừa gì ko . Về tham số truyền vào có null thì đối với khóa chính và các thuộc tính năm trong khóa ngoại thì ko null thôi ( điều đó là hiển nhiên rồi. Còn các thứ còn lại null dc mà )

  6. #6
    Ngày gia nhập
    12 2011
    Bài viết
    2

    Mặc định Lỗi không thể thực thi câu lệnh trong lập trình CSDL bằng Stored procedure

    Nếu store chạy tốt cho những form khác thì có thể do tham số truyền vào có vấn đề, nên debug ghi nhận các tham số đầu vào để kiểm tra

  7. #7
    Ngày gia nhập
    12 2009
    Bài viết
    87

    Trích dẫn Nguyên bản được gửi bởi nautilux Xem bài viết
    trong catch bạn nên đặt Exception để dễ xử lý, còn việc bạn hủy kết nối trước dataTable thì không nên
    ồ cảm ơn lời khuyên của bạn. Nhưng mình để như vậy thì formHieuXe của mình vẫn hoạt động bình thường. Chả sứt mẻ gì cả.

  8. #8
    Ngày gia nhập
    02 2011
    Nơi ở
    Tp.HCM
    Bài viết
    124

    Sao bạn không bắt Exception và xem nó báo cái gì?

  9. #9
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    Trích dẫn Nguyên bản được gửi bởi acumen Xem bài viết
    Đây:
    Insert
    Code:
    ALTER PROCEDURE HieuXe_Insert
    	@HieuXe char(20),
    	@GhiChu nvarchar(100)
    AS
    	BEGIN
    		insert into HIEUXEs values(@HieuXe,@GhiChu)
    	END
    Update:
    Code:
    ALTER PROCEDURE HieuXe_Update
    	@HieuXe char(20),
    	@GhiChu nvarchar(100)
    AS
    	BEGIN
    		update HIEUXEs set GhiChu = @GhiChu where HieuXe = @HieuXe
    	END
    Delete
    Code:
    ALTER PROCEDURE HieuXe_Delete
    	@HieuXe char(20)
    AS
    	BEGIN
    		delete from HIEUXEs where HieuXe = @HieuXe
    	END
    Vì số lượng stored procedure rất nhiều nên mình ko post lên hết dc. Thế nhưng tất cả các stored procedure đối với các table khác đều có cấu trúc giống như trên. Như mình đã nói bên trên thì việc truyền tham số vào mình đã xem khá kỹ xem có truyền sai kiểu dữ liệu, thiếu hay thừa gì ko . Về tham số truyền vào có null thì đối với khóa chính và các thuộc tính năm trong khóa ngoại thì ko null thôi ( điều đó là hiển nhiên rồi. Còn các thứ còn lại null dc mà )
    insert into HIEUXEs values(@HieuXe,@GhiChu) Bảng hiệu xe của bạn có đúng 2 trường đó à? làm kiểu đó ko an toàn cho lắm. Hơn nữa, sao bạn ko dùng Debug mà "soi" giá trị xem đúng chưa? Khi đó nó trơ hay ko? chạy thế nào bạn kiểm soát được hết là biết lỗi thôi mà.
    p/s: sao code bạn ko bắt lỗi gì thế? ở cái click +insert phải throw=> để ở click thông báo lỗi chứ.
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

  10. #10
    Ngày gia nhập
    12 2009
    Bài viết
    87

    Trích dẫn Nguyên bản được gửi bởi mrfour.it Xem bài viết
    insert into HIEUXEs values(@HieuXe,@GhiChu) Bảng hiệu xe của bạn có đúng 2 trường đó à? làm kiểu đó ko an toàn cho lắm. Hơn nữa, sao bạn ko dùng Debug mà "soi" giá trị xem đúng chưa? Khi đó nó trơ hay ko? chạy thế nào bạn kiểm soát được hết là biết lỗi thôi mà.
    p/s: sao code bạn ko bắt lỗi gì thế? ở cái click +insert phải throw=> để ở click thông báo lỗi chứ.
    Sao lại ko an toàn. Yêu cầu của phần mềm mình làm đối với cái bảng này đơn giản là chứa các hiệu xe thôi. Mình chả động gì các thuộc tính như năm ra đời, dòng xe loại nào đâu của các hãng xe đâu.
    Mình sẽ bắt thử Exception để xem nó như thế nào .
    Xin cảm ơn tất cả các bạn.

Các đề tài tương tự

  1. Stored procedure trong linq không cập nhật được
    Gửi bởi ndnhan trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 11-06-2013, 02:01 PM
  2. Gọi STORED PROCEDURE TRONG ORACLE từ C#
    Gửi bởi thuan199 trong diễn đàn Thắc mắc Oracle
    Trả lời: 9
    Bài viết cuối: 16-10-2012, 09:30 AM
  3. Sử dụng Stored Procedure trong Access ?
    Gửi bởi kidteam trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 25-07-2011, 10:02 PM
  4. Gọi Stored Procedure trong Oracle từ C#
    Gửi bởi thuan199 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 23-12-2009, 03:19 PM
  5. stored procedure trong C#
    Gửi bởi dragon152 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 23-10-2009, 02:27 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn