Tôi đang cố thực thi thủ tục lưu sẵn trong Visual Studio. Nó được đưa ra dưới đây.ExecuteNonQuery() trả về -1 khi thực hiện thủ tục đã lưu
CREATE PROCEDURE [dbo].[addStudent]
@stuName varchar(50),
@address varchar(100),
@tel varchar(15),
@etel varchar(15),
@nic varchar (10),
@dob date
AS
BEGIN
SET NOCOUNT ON;
DECLARE @currentID INT
DECLARE @existPerson INT
SET @existPerson = (SELECT p_ID FROM Student WHERE s_NIC = @nic);
IF @existPerson = null
BEGIN
INSERT INTO Person (p_Name, p_RegDate, p_Address, p_Tel, p_EmergeNo, p_Valid, p_Userlevel)
VALUES (@stuName, GETDATE(), @address, @tel, @etel, 0, 'Student');
SET @currentID = (SELECT MAX(p_ID) FROM Person);
INSERT INTO Student (p_ID, s_Barcode, s_DOB, s_NIC) VALUES (@currentID , NULL, @dob, @nic);
return 0;
END
ELSE
return -1;
END
Làm như vậy bằng cách sử dụng mã bên dưới.
SqlConnection con = new SqlConnection();
Connect conn = new Connect();
con = conn.getConnected();
con.Open();
cmd = new SqlCommand("addStudent", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@stuName", SqlDbType.VarChar).Value = nameTxt.Text.ToString();
cmd.Parameters.Add("@address", SqlDbType.VarChar).Value = addressTxt.Text.ToString();
cmd.Parameters.Add("@tel", SqlDbType.VarChar).Value = telTxt.Text.ToString();
cmd.Parameters.Add("@etel", SqlDbType.VarChar).Value = emerTxt.Text.ToString();
cmd.Parameters.Add("@nic", SqlDbType.VarChar).Value = nicTxt.Text.ToString();
cmd.Parameters.Add("@dob", SqlDbType.DateTime).Value = dobTime.Value.ToString("MM-dd-yyyy");
int n = cmd.ExecuteNonQuery();
MessageBox.Show(n.ToString());
Nhưng nó trả về tôi -1. Tôi đã thử thủ tục được lưu trữ này bằng cách nhập các giá trị giống như tôi đã chụp từ gỡ lỗi. Nó đã thành công. Lỗi có thể là gì? Cảm ơn rất nhiều!
Thay vì sử dụng dòng 'SET @currentID = (SELECT MAX)', hãy thử sử dụng '@@ IDENTITY'. Không liên quan đến lỗi, nhưng chỉ là một mẹo. – SchmitzIT
Bạn thực sự nên sử dụng định dạng 'yyyyMMdd' cho các ngày chứ không phải định dạng' MM-dd-yyyy' hoặc các định dạng tương tự, nó có nhiều nền văn hóa bất khả tri hơn theo cách đó. – Seph
@Seph - chúng phải truyền chúng như 'DateTime' và không định dạng chúng thành chuỗi. –