Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Làm sao để lấy thông báo từ SQL lên Winform

00:43 28-05-2017 1.899 lượt xem 5 bình luận 04:33 12-06-2017
Create PROC usp_ThemKhachHang
@ten NVarchar(50),
@cmnd Int, 
@sdt Varchar(50)
AS
DECLARE @i Int = 1
BEGIN
	WHILE EXISTS(SELECT 1 FROM dbo.KHACHHANG WHERE MaKH = @i)
	BEGIN
		SET @i = @i + 1
	END
	IF EXISTS(SELECT 1 FROM dbo.KHACHHANG WHERE CMND = @cmnd)-- mo khach hang dung 1 chung minh nhan dan khac nhau
		BEGIN
			PRINT N'CMND đã được sử dụng!'
			RETURN
		END
	BEGIN TRAN
	SET IDENTITY_INSERT dbo.KHACHHANG ON
	INSERT INTO dbo.KHACHHANG (MaKH, HoTen, CMND, SDT) VALUES (@i, @ten, @cmnd, @sdt)
	COMMIT TRAN 
	IF @@ERROR<>0
	BEGIN
		ROLLBACK TRAN
	END
END

Hiện tại em có 1 stored procedure như trên. Trong quá trình gọi thực hiện query thì bị dính phần CMND, chạy bên SQL thì hiện được dòng PRINT N'CMND đã được sử dụng!' , nhưng bên Winform, xử dụng provider như bài Quán cà phê, có cách nào lấy được dòng này để xuất lên thông báo không ạ?

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Trần Thành Vi Thanh Member đã bình luận 21:57 29-05-2017

Thử bắt sự kiện InfoMessage của connection xem.

Ví dụ:

var connection = new SqlConnection(<chuỗi kết nối>);

connection.InfoMessage += MyFunction;


void MyFunction(object sender, SqlInfoMessageEventArgs e)
{
     MessageBox.Show(e.Message); // e.Message để lấy message từ dưới sql gửi lên
}

 

Shinigami đã bình luận 01:54 28-05-2017

Bạn tạo 1 hàm kiểm tra CMND có trùng không

+ Tạo 1 câu lệnh truy vấn:  

string Query = "select count (*) from dbo.KHACHHANG where CMND = @cmnd ";
// tạo 1 procedure cũng dc

+ Trong c# dùng câu lệnh excuteQuery( ) để chạy và gán vào 1 cái adapter

adapter A = excuteQuery( Query); 

+ Dùng Apdapter để fill dữ liệu đó vào 1 datatable

DataTable dataTable;
A.fill(dataTable)

+ Xong r kiểm tra . Nếu dataTable.Row = 0 có nghĩa là CMND chưa trùng . Nếu dataTable.Row = 1 có nghĩa là CMND trùng

if (dataTable.Row >0 ) 
{ CMND trùng }
else
{ Chưa trùng }

 

Câu hỏi mới nhất