我正在使用存储过程来计算和验证用户名是否已存在于数据库中,但问题不存在,我的问题是当我尝试在某些博客中获取 C# 中的 SELECTION 值时我找到这段代码:
// Create ConnectionString
string connectionString = ConfigurationManager.ConnectionStrings["ProjectPractice"].ConnectionString;
// Check if the username is not in the DataBase
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmo = new SqlCommand("spBuscaUsuarioMail", con);
cmo.CommandType = CommandType.StoredProcedure;
cmo.Parameters.AddWithValue("@Username", 1);
SqlParameter NroUserName = new SqlParameter("@Num_de_Usuarios", 0);
NroUserName.Direction = ParameterDirection.Output;
cmo.Parameters.Add(NroUserName);
con.Open();
int contarUsername = Int32.Parse(cmo.Parameters["@Num_de_Usuarios"].Value.ToString());
这看起来很棒!它看起来功能很好,但在最后一部分 int contarUsername = Int32.Parse...
C# 给了我一个异常,它是下一个:
NullReferenceException was unhandled by user code.
Object reference not set o an instance of an object.
然后,在故障排除提示中我读到:
- 在调用方法之前检查对象是否为空。
- 使用“new关键字创建对象实例。”
- 获取有关此异常的一般帮助。
我尝试了很多东西,但现在我真的很累,想不出新的解决方案。
这是我正在使用的存储过程:
CREATE PROCEDURE spBuscaUsuarioMail
@Username CHAR (25),
@Num_de_Usuarios INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
SELECT @Num_de_Usuarios = COUNT (UserName)
FROM dbo.Usuarios
WHERE UserName = @Username
END
EXEC spBuscaUsuarioMail '1', @Num_de_Usuarios OUTPUT
SELECT @Num_de_Usuarios
你的参数有问题....
在存储过程中,你有
@Username CHAR (25),
@Num_de_Usuarios INT OUTPUT
然而在您的 C# 代码中,您将它们都设置为 int
,看起来:
cmo.Parameters.AddWithValue("@Username", 1);
SqlParameter NroUserName = new SqlParameter("@Num_de_Usuarios", 0);
NroUserName.Direction = ParameterDirection.Output;
cmo.Parameters.Add(NroUserName);
我认为您需要将 @Username
参数设置为字符串 - 并为其赋予一些有意义的值!
cmo.Parameters.Add("@Username", SqlDbType.Char, 25).Value = "Steve"; // or whatever
当然,正如@Steve 已经提到的:在读取OUTPUT
参数之前,您需要实际执行您的存储过程!
我是一名优秀的程序员,十分优秀!