我一直在摔跤這幾天,並已廣泛挖通過StackOverflow和各種其他網站。我從字面上畫空白。我試圖從我的存儲過程中獲得單個結果。從SQL Server存儲過程獲取單一響應與C#
這裏是我的存儲過程:
ALTER PROC [dbo].[myHelper_Simulate]
@CCOID nvarchar(100), @RVal nvarchar OUTPUT
AS
DECLARE @UserID int
DECLARE @GUID uniqueidentifier
SELECT @UserID = UserID
FROM [User]
WHERE CCOID = @CCOID AND deleted = 0
SELECT @GUID = newid()
IF @UserID > 0
BEGIN
INSERT [Audit] ([GUID], Created, UserID, ActionType, Action, Level)
VALUES (@GUID, getdate(), @UserID, 'Authentication', 'Test Authentication', 'Success')
SELECT @RVal = 'http://www.ttfakedomain.com/Logon.aspx?id=' + CAST(@GUID AS nvarchar(50))
RETURN
END
ELSE
SELECT @RVal = 'Couldn''t find a user record for the CCOID ' + @CCOID
RETURN
GO
最初的程序被寫入打印出結果。我已經添加了@RVal
和RETURN
以嘗試讓值返回到我的C#代碼。
這裏是我的C#程序(svrConn
已經連接到數據庫):
private void btnSimulate_MouseClick(object sender, MouseEventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = svrConn;
object result = new object();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[" + tDatabase + "].[dbo].myHelper_Simulate";
cmd.Parameters.Add(new SqlParameter("@CCOID", txtDUserCCOID.Text.Trim()));
cmd.Parameters.Add(new SqlParameter("@RVal", ""));
cmd.Parameters.Add(new SqlParameter("RETURN_VALUE", SqlDbType.NVarChar)).Direction = ParameterDirection.ReturnValue;
try
{
result = cmd.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
if (result != null)
{
tString = result.ToString();
MessageBox.Show(tString);
}
}
的問題是,result
是回來了空。我不確定這是由於存儲過程還是我如何設置我的參數並致電ExecuteScalar
。
Tim不要忘記在using語句中包裝commend,以免泄漏資源或氾濫連接池。 – Kane