2016-03-11 36 views
2

我想從C#代碼中讀取存儲到SQL Server中的按位值。如何從C#代碼中確定存儲在SQL Server中的按位代碼值

假設下面的代碼將位值存儲到數據庫中。

DECLARE @MedCopay VARCHAR(1); 
DECLARE @MedDeductible VARCHAR(1); 
DECLARE @MedCoins VARCHAR(1); 
SET @MedCopay = 'Y'; 
SET @MedDeductible = 'N'; 
SET @MedCoins = 'Y'; 

SELECT CASE 
     WHEN @MedCopay = 'Y' 
     THEN 1 
     ELSE 0 
    END|CASE 
      WHEN @MedDeductible = 'Y' 
      THEN 10 
      ELSE 0 
     END|CASE 
       WHEN @MedCoins = 'Y' 
       THEN 100 
       ELSE 0 
      END; 

上面的查詢將下面的值存儲到數據庫

101 

所以問題是,我怎麼能寫C#代碼,以確定

101 = MedCopay & MedCoins? 
+0

我建議你忘掉它。一般來說,SQL不是正確的工具。使用布爾類型的不同列。這將是一件容易的事情(特別是如果你需要搜索這些值的話) – Steve

+0

@Steve我同意你的建議,但此時不可能改變數據庫結構。 – M005

+1

這不是按位表示。 Transact-SQL中的「11」不表示二進制11.二進制11是Transact-SQL(小數基數)中的值「3」。 –

回答

2

您是否在尋找enum

[Flags] 
public enum Med { 
    Copay = 1, 
    Deductable = 2, 
    Coins = 4 
}; 

// 101 
    Console.Write(Convert.ToString((int) (Med.Copay | Med.Coins), 2)); 

反向:

String source = "101"; 

    Med parsed = (Med) (Convert.ToInt32(source, 2)); 
    // Copay, Coins 
    Console.Write(parsed); 

你可能想實現一個擴展類此:

public static class MedExtensions { 
    public static String Represent(this Med value) { 
     return Convert.ToString((int) value, 2); 
    } 
    } 

而且因此T他的測試將是

Console.Write((Med.Copay | Med.Coins).Represent()); 
+0

非常感謝! – M005

相關問題