簡體   English   中英

如何從C#存儲過程獲取布爾值

[英]how to get bool value from c# stored procedure

我使用了以下代碼:
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返回的值ExecuteScalarint

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 exists = (int)db.ExecuteScalar(cmd1) == 1;
return exists;

嘗試這個

bool customize_status = (RowAffected > 0);

如果找到記錄,它將返回true

為了以一種可以理解的方式將布爾值返回到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#前端以便將其分配給布爾變量的唯一方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM