如何从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值?

如何从c#存储过程中获取bool值

ExecuteScalar返回第一个选定的单元格,因此在您的示例中,将是返回的;所有你需要的是从object(这是ExecuteScalar返回)转换到int:

int status = (int)db.ExecuteScalar(cmd1);

(假设Customize_Statusint,等等)

请注意,您可能需要检查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。