Insert vào 2 bảng cùng lúc

Nhưng trong form hoá đơn của mình chỉ có 1 nút lưu cho tổng thể thui à. Với lại do mình khong biết cú pháp lấy mã HD nên mình làm hk ra

Đúng là chỉ có 1 nút nhưng bạn cần hiểu là khi click 1 nút đó trên máy chủ của bạn sẽ gọi đến 1 function. Trong function bạn vừa gọi thì bạn muốn xử lý bao nhiêu thao tác cũng được.

Vậy thao tác đầu tiên là bạn insert vào bảng hoadon khi bạn gọi hàm insert dữ liệu thì bạn sẽ nhận về được ID của row mà bạn vừa insert. Bạn có thể dùng var_dump() trong php để in ra cấu trúc của biến như thế bạn sẽ biết làm thế nào để lấy được id của hóa đơn. Mình ví dụ nhé:

$row = insert() //Câu lẹnh insert và query SQL của bạn. Cụ thể làm thế nào để insert trong DB thì bạn tự làm nhé.
var_dump($row);

Tất cả để là những query ở mức rất đơn giản thôi mà. :smiley:

1 Like

Oh vậy mình hiểu cách thức rồi. Cám ơn bạn nhiều

1 Like

tham khảo nhé @xuxutrinh

DECLARE @MaHD int  

insert into HoaDon (MaNV) values (11)
// lấy MaHD vừa mới insert vào để tiếp tục insert tiếp vào bảng ChiTietHD
SELECT @MaHD = SCOPE_IDENTITY()

insert into ChiTietHD (MaHD, MaMonAn)
values (@MaHD, '01')
2 Likes

Chào bạn , trên thực tế công việc thì thường là không bao giờ để tự động tăng mà ta phải tự thiết lập dữ liệu vào , thứ hai nếu phải truy vấn lại một lần nữa vào database để lấy khóa thì thứ nhất tốn tài nguyên và thời gian , thứ hai nếu lỡ cái thứ hai bị lỗi thì dữ liệu nhập lần đầu sẽ bị mồ côi và bạn lại phải tìm cách xóa nó đi. vậy để xử lí tốt thì bạn sẽ dùng Transaction , mô hình như sau

trans.begin();
int id = // gieo tự động mã ở đây
// kiểm tra id có trùng hay không tại đây hoặc theo cách khác

tạo hóa đơn cha với id trên
tạo hóa đơn con với id trên

trans.comit()

Nếu có lỗi trans.rollBack();

Chúc bạn thành công ^^~

1 Like

Bạn tạo store procedure thêm bên sql mỗi bản 1 store, rồi vào visual gọi từng store procedure đó, insert vào mấy bảng cũng dc.
vd mình có 2 store thêm là themhoadon va them chitiethoadon

  • trong controller:
    public ActionResult(Formcollection collection){
    private BanHangEntities db = new BanHangEntities();
    // them hoa don truoc
    // khai bao ma de co thể gán cho bảng chi tiết hóa đơn
    int madh = collection[“mahd”];
    db.themhoadon(
    madh,
    collection[“ngaylap”]
    );
    // them chi tiet hoa don
    int madhbangchitiet = mahd
    db.themchitiethoadon(
    madhbangchitiet,
    collection[“soluong”],
    collection[gia]
    );
    }
    ///
    /// phần view
    ///
    @using(BeginForm())
    {
    <labe>madh</label>
    <input type="text" name="mahd"/>
    // va cac truong khac
    // luu ý: phần name=“GiaTriNhapVao” phai trung ben controller
    <input type="submit" value="them"/>
    }
    // email của mình: [email protected]
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?