我有以下存儲過程:SQL存儲Procudure沒有返回值
USE [CW]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[addCustomer]
@firstname VARCHAR(50) = '',
@lastname VARCHAR(50) = '',
@email VARCHAR(50) = '',
@password VARCHAR(50) = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT * FROM customer WHERE email = @email
IF (@@ROWCOUNT = 0)
BEGIN
-- Add to database.
INSERT INTO customer (firstname, lastname, email, [password])
VALUES (@firstname, @lastname, @email, @password);
SELECT @@IDENTITY;
END
ELSE
BEGIN
-- Don't add already registered
SELECT customer.customerID FROM customer WHERE email = @email;
END
END
這是給客戶添加到表。如果他們的電子郵件已在表格中,則會返回該客戶的ID。如果電子郵件不在表格中,則創建它並返回新的ID。
問題是,當它創建新記錄時,它返回null。但是當我在Management Studio中執行sproc時,它會顯示正確的返回值。
下面的代碼:
SqlCommand cmd0 = new SqlCommand();
cmd0.Connection = conn;
cmd0.CommandType = CommandType.StoredProcedure;
cmd0.CommandText = "addCustomer";
cmd0.Parameters.AddWithValue("@firstname", firstname);
cmd0.Parameters.AddWithValue("@lastname", lastname);
cmd0.Parameters.AddWithValue("@email", email);
cmd0.Parameters.AddWithValue("@password", password);
var scaled = cmd0.ExecuteScalar();
customerID = scaled.ToString();
的customerID爲空當電子郵件是獨一無二的。
或者發電子郵件給PK:D和溝身份證 – 2011-06-09 22:13:26
無關你的問題,但在幾乎所有情況下'@@ IDENTITY'是錯誤的,使用'scope_identity()'代替。如果每個觸發器都添加到表中,則@ @ IDENTITY不會返回所期望的值。 '@@ IDENTITY':http://msdn.microsoft.com/en-us/library/ms187342.aspx'scope_identity()':http://msdn.microsoft.com/en-us/library/ms190315.aspx – 2011-06-09 23:12:05