C# SqlCommand.ExecuteScalar() 似乎总是产生一个值为 0 的对象。使用 SQL Server 2012。所有存储过程都会发生这种情况。这是一个非常简单的例子:
CREATE PROCEDURE [dbo].[sp_IsUnitPackaged]
@Serial varchar(20)
AS
BEGIN
SET NOCOUNT ON
SELECT COUNT(serial_number)
FROM dbo.t_pql_contents
WHERE serial_number = @Serial
END
GO
当我使用为@Serial 提供的已知现有值直接在 SSMS 中执行此操作时,我得到了预期的结果:
(No column name)
1
Return Value
0
当我使用以下代码在我的 C# 应用程序中执行时,result
以下始终为 0:
string unit_serial = "something"; // The same known existing value
SqlCommand comm = new SqlCommand("sp_IsUnitPackaged");
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@Serial", SqlDbType.VarChar)
{
Value = unit_serial,
Direction = ParameterDirection.Input,
Size = 20
});
int result = 0;
using (SqlConnection conn = Utils.CONN)
{
conn.Open();
using (comm)
{
comm.Connection = conn;
Int32.TryParse(comm.ExecuteScalar().ToString(), out result);
}
}
我已经看到其他一些与此非常相似的问题。我能找到的最佳答案似乎表明,RETURN
当您希望将存储过程与ExecuteScalar
. 如你所见,我不是。
那么,我在这里缺少什么?
更新:我还尝试RETURN 0
在我的过程末尾添加一条语句,以便在 SSMS 中执行时只有一个结果:
CREATE PROCEDURE [dbo].[sp_IsUnitPackaged]
@Serial varchar(20)
AS
BEGIN
SET NOCOUNT ON
SELECT COUNT(serial_number)
FROM dbo.t_pql_contents
WHERE serial_number = @Serial
RETURN 0
END
GO
在 SSMS 中执行这个现在只给出以下结果:
(No column name)
1
不过,此过程的更新继续在我的应用程序中给出 0 的标量结果。