【发布时间】:2014-06-17 13:06:22
【问题描述】:
我有以下 SQL Server 2012 Express 存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Andy Armstrong
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE db_CheckLogin
-- Add the parameters for the stored procedure here
@LoginName NVARCHAR(15),
@Password NVARCHAR(15),
@ReturnCode UNIQUEIDENTIFIER OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT UserID=@ReturnCode FROM tblMemberLogin WHERE LoginName = @LoginName AND LoginPassword = @Password;
END
GO
我从 .NET C# 存储过程中调用它,如下所示:
// Create Command Interface
SqlCommand cmdStoredProc = new SqlCommand("db_CheckLogin", objConnection);
cmdStoredProc.CommandType = CommandType.StoredProcedure;
// Fill The Parameters Collection Based Upon Stored Procedure.
SqlParameter workParam = null;
workParam = cmdStoredProc.Parameters.Add("@LoginName", SqlDbType.NVarChar, 15);
workParam = cmdStoredProc.Parameters.Add("@Password", SqlDbType.NVarChar, 15);
// Prepare Output Parameter
workParam = cmdStoredProc.Parameters.Add("@ReturnCode", SqlDbType.UniqueIdentifier);
workParam.Direction = ParameterDirection.Output;
// Set Values For Our Procedure
cmdStoredProc.Parameters["@LoginName"].Value = ctrlUsername.Text;
cmdStoredProc.Parameters["@Password"].Value = ctrlPassword.Text;
// Exec Procedure
cmdStoredProc.ExecuteNonQuery();
但是由于某种原因,它没有返回我期望的行。
tblMemberLogin 的架构如下:
用户 ID = 唯一标识符 pk, 登录名 = NVARCHAR(15) 登录密码 = NVARCHAR(15)
我在该表中有一行,用户名为myUser,密码为passw0rd
但是运行代码返回 0 行。手动运行存储过程也不起作用 - 运行如下查询:
SELECT UserID FROM tblMemberLogin WHERE LoginName = 'myUser' AND LoginPassword = 'passw0rd' 完美运行!请帮我找出哪里出错了。
【问题讨论】:
-
请不要告诉我们您以纯文本形式存储密码 :(
-
在 select 语句中,您分配的是 UserID=@ReturnCode 而不是 @ReturnCode =UserID。
标签: c# sql-server stored-procedures sql-server-2012-express