-2

你好 是否可以将存储过程的结果作为真/假值存储在布尔变量中?就像是:

1)

bool var = ExecuteScalar("sp_name", parameters);

或者

2)

bool var = ClassName.getValue(parameters);

其中 getValue() 是具有以下代码的方法:

return dataBase.ExecuteDataSet("sp_name", parameters);

我想知道客户有没有卡。我正在考虑使用我现在拥有的基本上是上面的第二个选项,然后创建一个条件是否行数大于零。但我也想知道是否还有其他方法可以使用。

提前致谢。

4

3 回答 3

1

你没有说你正在使用哪个 DBMS。例如,SQL Server 没有bool数据类型,但您可以让您的 sproc 返回一个int,您可以测试它的非零值,例如

bool result = ((int) ExecuteScalar("sp_name", parameters)) != 0;

注意:我没有对此进行测试,但您可以尝试让存储过程返回 a bit。就 SQL Server 而言,这仍然是一个整数值,但 ADO.NET 应该检测到它并自动bool为您转换它。它当然适用于 sproc 参数。

于 2012-12-19T18:50:10.667 回答
1

你可以简单地做:

DataSet ds = dataBase.ExecuteDataSet("sp_name", parameters);
return ds.Tables[0].Rows.Count>0; //true if record found; false if no rows

假设您的 proc 只是使用 where 子句中的参数进行选择。就像是:

select col1 from table a where condition=@parameter
于 2012-12-19T18:51:26.657 回答
0

ExecuteScalar返回一个对象。所以不,上面的#1 会抛出一个错误。假设您的存储过程返回一个可以转换为真/假的值,您必须执行以下操作:

bool var;
bool.TryParse(ExecuteScalar("sp_name", paramaters).ToString(), out var);
于 2012-12-19T18:48:27.567 回答