Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象引用未设置为C中对象SQL Server的实例#_C#_Sql Server - Fatal编程技术网

C# 对象引用未设置为C中对象SQL Server的实例#

C# 对象引用未设置为C中对象SQL Server的实例#,c#,sql-server,C#,Sql Server,我在SQL Server中使用了此过程,并在SQL Server Management Studio中进行了尝试,它在我的数据库中运行良好,但在c#中不起作用: Create Procedure BorrowIsCorrect @ProductName nvarchar(100), @PersonId nvarchar(50), @HBD bit, @count int output as Begin select @count = count(*)

我在SQL Server中使用了此过程,并在SQL Server Management Studio中进行了尝试,它在我的数据库中运行良好,但在c#中不起作用:

Create Procedure BorrowIsCorrect
    @ProductName nvarchar(100),
    @PersonId nvarchar(50),
    @HBD bit,
    @count int output
as
Begin
    select @count = count(*) 
    from BorrowTable
    where Person_Identity = @PersonId 
      and Product_Name = @ProductName 
      and H_B_D = @HBD

    return @count
end
这是我的c语言代码:

但C#中的这段代码引发了一个异常

对象引用未设置为对象的实例

我怎样才能修好它

谢谢

当我调试它时,一切都很好,直到这一行:

 return ((int)(cmd.ExecuteScalar()) == 1) ? true : false;
或者我尝试了这行代码而不是上面的代码:

object result = (int)(cmd.ExecuteScalar());
结果变量设置为无值,因为仅在执行
cmd.ExecuteScalar()时才会发生异常

编辑:

我发现结果值计算正确,但没有返回到对象中,如您所见:

cmd.parameters
中执行
cmd.ExecuteScalar()
后,如果展开
count
(结果和返回值形式为proc),我们现在会看到四个变量(正确),如下所示,其值为
1
(结果正确),但
cmd.ExecuteScalar()
返回的对象为空


最后,我找到了一种解决问题的巧妙方法(我认为这不是一种标准方法):


检查您的
borrow
变量及其
Person或Product
内部类实例borrow、Person和Product均不为空。我未使用StoredProcedure尝试此函数,它工作正常,但使用过程不工作!!whay downvote?我知道nullreference异常,但这一个似乎有点不同。在StackOverflow链接中没有找到答案。异常在哪里引发?这里:return((int)(cmd.ExecuteScalar())==1)?真:假;当执行查询时,这不是一种棘手的方法-它只是从
SqlCommand
访问输出参数的方法!您还可以使用一个名称:
intresult=cmd.Parameters[“@count”].Value以获取值。。。。
object result = (int)(cmd.ExecuteScalar());
cmd.ExecuteScalar();
int result=cmd.Parameters[0].Value;