PDA

View Full Version : [Help] Nhập giá trị null từ C# xuống stored procedure



siebo
04-01-2011, 19:50
Mình có đoạn procedure update table Ban như thế này:


CREATE PROCEDURE updateBAN
(@MaBan ntext,
@MaKhuVuc ntext,
@SoThuTu int,
@SoLuongGhe int,
@TinhTrang ntext,
@MaBG ntext,
@SoLuotKhach int,
@GhiChu ntext
)
AS

UPDATE BAN SET MaKhuVuc = @MaKhuVuc, SoThuTuBan = @SoThuTu, SoLuongGhe = @SoLuongGhe, TinhTrang = @TinhTrang, MaBG = @MaBG, SoLuotKhach = @SoLuotKhach, GhiChu = @GhiChu
where MaBan like @MaBan


Nhìn thì rối nhưng mình chỉ muốn hỏi khi gọi procedure trên bằng C#:


SqlCommand sqlcmd = new SqlCommand("updateBAN", ketnoi.Connection);
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.Add("@MaBan", SqlDbType.NVarChar).Value = this.strMaBan;
sqlcmd.Parameters.Add("@MaKhuVuc", SqlDbType.NVarChar).Value = this.strMaKhuVuc;
sqlcmd.Parameters.Add("@SoThuTu", SqlDbType.Int).Value = this.iSoThuTu;
sqlcmd.Parameters.Add("@SoLuongGhe", SqlDbType.Int).Value = this.iSoLuongGhe;
sqlcmd.Parameters.Add("@TinhTrang", SqlDbType.NVarChar).Value = this.strTinhTrang;
sqlcmd.Parameters.Add("@MaBG", SqlDbType.NVarChar).Value = this.strMaBG;
sqlcmd.Parameters.Add("@SoLuotKhach", SqlDbType.Int).Value = this.iSoLuotKhach;
sqlcmd.Parameters.Add("@GhiChu", SqlDbType.NVarChar).Value = this.strGhiChuBan;

sqlcmd.ExecuteNonQuery();


Thuộc tính MaBG là khóa ngoại trỏ tới MaBG là khóa chính của bảng BanGhep, mình muốn update giá trị null cho nó (bởi vì nó là khóa ngoại nên không nhập bậy đc):

Ban.strMaBG = null;
Ban.updateBAN();

Nhưng C# lại báo lỗi @MaBG chưa đc supplied và không thực thi, còn trong sql query mình vẫn cho nó giá trị null bình thường. Ai biết hướng dẫn mình với, cảm ơn nhiều nhiều!

zxcongducxz
04-01-2011, 20:40
Ban.strMaBG = "";
Ban.updateBAN();

Ban.strMaBG = "NULL";
Ban.updateBAN();

Ban.strMaBG = "null";
Ban.updateBAN();

siebo
04-01-2011, 20:55
Ban.strMaBG = "";
Ban.updateBAN();

Ban.strMaBG = "NULL";
Ban.updateBAN();

Ban.strMaBG = "null";
Ban.updateBAN();

Thử cả 3 cách trên đều không đc. MaBG là khóa ngoại nên chỉ nhận giá trị đã có trong table BanGhep ('BG0001', 'BG0002', ...) hoặc là null. Còn 3 cách gán trên đều gán cho nó giá trị kiểu String rồi, báo lỗi khóa ngoại MaBG!

[=========> Bổ sung bài viết <=========]



if (this.StrMaBG!=null)
sqlcmd.Parameters.Add("@MaBG", SqlDbType.NVarChar).Value = this.strMaBG;
else
sqlcmd.Parameters.Add("@MaBG", SqlDbType.NVarChar).Value = DBNull.Value;


Đã giải quyết xong, cảm ơn bạn congduc nhìu nghen!