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

时间:2014-08-13 12:38:34

标签: c# asp.net sql-server

我使用过这段代码:
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值?

4 个答案:

答案 0 :(得分:1)

ExecuteScalar会返回所选的第一个单元格,因此在您的示例中返回的内容;您应该只需要从objectwhich is what ExecuteScalar returns)投射到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?真? 为什么?

答案 1 :(得分:0)

你可以这样做

bool exists = (int)db.ExecuteScalar(cmd1) == 1;
return exists;

答案 2 :(得分:0)

试试这个

bool customize_status = (RowAffected > 0);

如果找到记录,则会返回true

答案 3 :(得分:0)

要以可以理解的方式将布尔值返回到C#前端,我会这样做:

SELECT CASE WHEN Customize_Status = 0 THEN 'false' ELSE 'true' END AS [Customize_Status]

然后,不管你如何掌握前端的数据,你都可以写(让我们假装你把它作为数据加载器数据行中的值返回)...

bool Customize_Status = Convert.ToBoolean(dr["Customize_Status"].ToString());

这是我发现从SQL Server数据库和C#前端获取bool的唯一方法,因此可以将其分配给bool。