2010-04-15 58 views
67

Tôi có phương thức đang kết nối với cơ sở dữ liệu qua Odbc. Các thủ tục lưu trữ mà tôi là gọi có một giá trị trả về mà từ phía cơ sở dữ liệu là một 'Char'. Ngay bây giờ tôi đang lấy giá trị trả về đó như một chuỗi và sử dụng nó trong một câu lệnh if đơn giản. Tôi thực sự không thích những ý tưởng so sánh một chuỗi như thế này khi chỉ có hai giá trị có thể trở về từ cơ sở dữ liệu, 0 và 1.Cách chuyển đổi "0" và "1" thành false và true

OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn); 

fetchCommand.CommandType = CommandType.StoredProcedure; 
fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter); 
fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1) 
      .Direction = ParameterDirection.Output; 
fetchCommand.ExecuteNonQuery(); 

string returnValue = fetchCommand.Parameters["@myReturnValue"].Value.ToString(); 
if (returnValue == "1") 
{ 
    return true; 
} 

Điều gì sẽ là cách thích hợp để xử lý tình trạng này. Tôi đã thử 'Convert.ToBoolean()' mà dường như như câu trả lời rõ ràng nhưng tôi chạy vào chuỗi 'không được công nhận là một Boolean hợp lệ. 'ngoại lệ bị ném. Tôi có thiếu một cái gì đó ở đây, hoặc là có một cách khác để làm cho '1' và '0' hành động như đúng và sai?

Cảm ơn!

Trả lời

121

Làm thế nào về:

return (returnValue == "1"); 

hoặc theo đề nghị dưới đây:

return (returnValue != "0"); 

Một chính xác sẽ phụ thuộc vào những gì bạn đang tìm kiếm như là một kết quả thành công.

+7

Chính xác? Kiểm tra; Ngắn gọn? Kiểm tra; Thanh lịch? Kiểm tra. +1. – Earlz

+6

Tôi khuyên bạn nên sử dụng 'return (returnValue! =" 0 ")'. Sẽ tự nhiên hơn khi '0' là' sai' và mọi số không bằng 0 là 'đúng'.Tất nhiên ở đây chúng tôi có trường hợp Chris sử dụng dây thay vì số, vì vậy bình luận này chỉ có một phần hợp lệ;) – Gacek

+0

Nó luôn luôn là một cuộc tranh luận. 0 cũng có nghĩa là ERROR_SUCCESS có nghĩa là mọi thứ diễn ra tốt đẹp. Nhưng tôi đồng ý với Gacek rằng nó tự nhiên hơn. –

5

Đặt loại trả về thành số - bạn không cần một char (vì vậy đừng sử dụng nó); một giá trị số (0/1) có thể được chuyển đổi với Convert.ToBoolean (num)

Nếu không: sử dụng Kevin của câu trả lời

+0

Tôi ước rằng chúng ta có thể thay đổi kiểu trả về. Nhưng chúng tôi đang mắc kẹt với những gì nó được. – Chris

+5

'Convert.ToBoolean' chỉ chấp nhận các chuỗi True/true/False/false – Yaro

12

Nếu bạn muốn chuyển đổi sang luôn thành công, có lẽ là cách tốt nhất để chuyển đổi chuỗi sẽ để xem xét "1"true và mọi thứ khác là false (như Kevin làm). Nếu bạn muốn chuyển đổi sang thất bại nếu bất cứ điều gì khác hơn là "1" hoặc "0" được trả lại, thì sau đây sẽ là đủ (bạn có thể đặt nó trong một phương pháp helper):

if (returnValue == "1") 
{ 
    return true; 
} 
else if (returnValue == "0") 
{ 
    return false; 
} 
else 
{ 
    throw new FormatException("The string is not a recognized as a valid boolean value."); 
} 
+0

Ý tưởng hay để nắm bắt giá trị không được công nhận. Không chắc tôi muốn đi theo cách đó, nhưng vẫn là một ý kiến ​​hay. – Chris

74

Trong một dòng mã:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue)) 
+1

không súc tích như câu trả lời được chấp nhận. – BrianK

+2

Tôi thích phiên bản của bạn Chris vì như câu hỏi đã nêu, cho phép sử dụng boolean thay vì so sánh chuỗi. – Svet

1

Hoặc nếu giá trị Boolean không được trả lại, bạn có thể làm một cái gì đó như thế này:

bool boolValue = (returnValue == "1"); 
-1
(returnValue != "1" ? false : true); 
+1

Thật không may, giải pháp này trả về một chuỗi, không phải là một boolean – Drakes

+1

Làm thế nào điều này sẽ trả về một chuỗi? chỉnh sửa: đừng bận tâm. Tôi nhận thấy bản chỉnh sửa. Xin lỗi vì điều đó. –

2

Bạn có thể sử dụng hình thức:

return returnValue.Equals("1") ? true : false; 

Hoặc đơn giản hơn (nhờ Jurijs Kastanovs):

return returnValue.Equals("1"); 
+5

Chỉ mất bit "? True: false". Nó hoàn toàn không cần thiết. Đặt tại {return returnValue.Equals ("1")} –

-1

Nếu bạn không muốn sử dụng convert.Just;

bool _status = status == "1" ? true : false; 

Có lẽ bạn sẽ trả lại giá trị theo ý muốn.

Các vấn đề liên quan