C# sql即使在赋值时也不返回null值

C# sql即使在赋值时也不返回null值,c#,asp.net,sql,sql-server-2008,C#,Asp.net,Sql,Sql Server 2008,使用asp.net、C、SQLServer2008 场景:用户尝试登录web应用程序。应用程序根据列表检查用户名以获取用户名。 若该用户是已知用户,页面将正常打开。若用户不是已知用户,则应打开页面并通知管理员 我无法编写SQL存储过程,这样它将返回值0或其他任何值,以便用于触发控件。我已经将SQL作为一个测试来执行,它可以正常工作;但在asp端,每次都会出错 非常感谢您的任何帮助 SQL Server存储过程代码: ALTER PROCEDURE [dbo].[spGetUserID] -- A

使用asp.net、C、SQLServer2008

场景:用户尝试登录web应用程序。应用程序根据列表检查用户名以获取用户名。 若该用户是已知用户,页面将正常打开。若用户不是已知用户,则应打开页面并通知管理员

我无法编写SQL存储过程,这样它将返回值0或其他任何值,以便用于触发控件。我已经将SQL作为一个测试来执行,它可以正常工作;但在asp端,每次都会出错

非常感谢您的任何帮助

SQL Server存储过程代码:

ALTER PROCEDURE [dbo].[spGetUserID]
-- Add the parameters for the stored procedure here
   (@Username as varchar(64))
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @X  INT

  SET @X = (SELECT COUNT(*) FROM Users WHERE (Username = @Username))

  If @X > 0
     RETURN 
        (SELECT UID FROM Users WHERE (UserName = @Username))
  ELSE
     RETURN 99999  --IVE ALSO TRIED USING 0 HERE. 
END
ASP.NET存储过程调用

 public int GetUserID(string Username)
 { 
       try
       {
            SQLCON = new SqlConnection(connectionString);
            SQLCON.Open();
            SQLCmd = new SqlCommand("spGetUserID", SQLCON);
            SQLCmd.CommandType = CommandType.StoredProcedure;
            SQLCmd.Parameters.Add("@username", SqlDbType.VarChar).Value = Username;
            int userID = (Int32)SQLCmd.ExecuteScalar();
            return userID;  //THIS ALWAYS JUMPS TO EXCEPTION
        }
        catch
        {
            return 0;
        }
        finally
        {
            SQLCON.Close();
        }
    }
ExecuteScalar用于返回一行一列的查询

要获取存储过程的返回值,请使用带有方向ReturnValue的参数:

ExecuteScalar用于返回一行一列的查询

要获取存储过程的返回值,请使用带有方向ReturnValue的参数:


尝试展开select语句。ExecuteScalar命令检索结果集中第一行的第一列,如果结果集为空,则检索空引用。存储的进程实际上不会返回结果集。试试看

ALTER PROCEDURE [dbo].[spGetUserID]
-- Add the parameters for the stored procedure here
   (@Username as varchar(64))
AS
BEGIN
  If Exists(SELECT 1 FROM Users WHERE (Username = @Username))
     SELECT UID FROM Users WHERE (UserName = @Username)
  ELSE
     SELECT 99999
END

尝试展开select语句。ExecuteScalar命令检索结果集中第一行的第一列,如果结果集为空,则检索空引用。存储的进程实际上不会返回结果集。试试看

ALTER PROCEDURE [dbo].[spGetUserID]
-- Add the parameters for the stored procedure here
   (@Username as varchar(64))
AS
BEGIN
  If Exists(SELECT 1 FROM Users WHERE (Username = @Username))
     SELECT UID FROM Users WHERE (UserName = @Username)
  ELSE
     SELECT 99999
END

你有什么例外?请提供完整、完整和准确的异常,包括任何。您可能拥有的InnerException UID是什么类型的?@Guanxi:存储过程的返回值始终是INTA,您将获得什么异常?请提供完整、完整和准确的异常,包括任何。您可能拥有的InnerException UID是什么类型?@Guanxi:存储过程的返回值始终是int