如何从c#存储过程中获取bool值
本文关键字:过程中 获取 bool 存储过程 存储 | 更新日期: 2023-09-27 18:18:01
我使用了以下代码:
SQL中的存储过程:
Alter PROCEDURE [dbo].[Get_Customize_Status_By_OrderId]
@Order_id varchar(50)
AS
BEGIN
select Customize_Status from dbo.ClientOrder where Order_id=@Order_id
END
GO
在c#中调用存储过程:
public static bool getcustomizestatusbyorderid(string orderid)
{
bool result = false;
try
{
Database db = new SqlDatabase(connectionstring);
DbCommand cmd1 = db.GetStoredProcCommand("[dbo].[Get_Customize_Status_By_OrderId]");
db.AddInParameter(cmd1, "@Order_id",DbType.String,orderid);
int RowAffected = db.ExecuteScalar(cmd1);
}
catch (Exception ex)
{
}
}
请告诉我如何在c#中获得customize_status
值?
ExecuteScalar
返回第一个选定的单元格,因此在您的示例中,将是返回的;所有你需要的是从object
(这是ExecuteScalar
返回)转换到int
:
int status = (int)db.ExecuteScalar(cmd1);
(假设Customize_Status
是int
,等等)
请注意,您可能需要检查null
,这将导致零行:
object result = db.ExecuteScalar(cmd1);
if(result == null) {
// no rows
} else if (result is DBNull) {
// at least one row; first cell was a database null
} else {
// at least one row; first cell was non-null
int status = (int)result;
// ...
}
"行影响"让我认为你与ExecuteNonQuery
混淆,坦率地说,返回值很少有意义无论如何。
也:ent-lib ?真的吗?为什么?
试试这个
bool customize_status = (RowAffected > 0);
如果找到记录,它将返回true
你可以这样做
bool exists = (int)db.ExecuteScalar(cmd1) == 1;
return exists;
为了将布尔值以一种可以理解的方式返回给c#前端,我这样做:
SELECT CASE WHEN Customize_Status = 0 THEN 'false' ELSE 'true' END AS [Customize_Status]
然后,无论您如何在前端获取数据,您都可以编写(让我们假设您将其作为数据读取器的数据流中的值返回)…
bool Customize_Status = Convert.ToBoolean(dr["Customize_Status"].ToString());
这是我所发现的唯一方法,将bool从SQL Server数据库中取出并放入c#前端,因此可以将其分配给bool。