c# - 如何从 C# 中的存储过程(SELECT COUNT)获取值

标签 c# sql stored-procedures count nullreferenceexception

我正在使用存储过程来计算和验证数据库中是否已存在用户名,但问题不存在,我的问题是当我尝试在一些博客中获取 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# 给了我一个异常(exception),即下一个:

NullReferenceException was unhandled by user code.
Object reference not set o an instance of an object.

然后,在故障排除提示中我读到:

  • 在调用方法之前检查对象是否为 null。
  • 使用“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参数!

关于c# - 如何从 C# 中的存储过程(SELECT COUNT)获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24812808/

相关文章:

c# - 带有 null 的字符串如何给出除 null 之外的其他结果

c# - 手动打开到 SQLite 数据库的 EntityConnection 会导致 ProviderIncompatibleException

c# - 添加属性后如何为 .NET 程序集保留 COM 二进制兼容性?

c# - Google speech to text API 在 C# 中

mysql - 如何在 MySQL 中返回数据透视表输出?

stored-procedures - 我的存储过程中的无效标识符问题

c# - 在代码中循环 DELETE 与在存储过程中循环

Mysql: n 列数为空

sql - 从字符串(VARCHAR2)oracle sql中一一打印字符,而不使用plsql,也不使用dual

php - 从最后插入的行获取最后插入的 id