2012-01-13 62 views
2

最好的方式來解釋這是代碼:返回位值

byte roominspiration = 0; 
query = "SELECT room_inspiration FROM Room WHERE room_id = @room_id); SELECT SCOPE_IDENTITY();"; 
using (sqlConnection1) 
{ 
    using (SqlCommand cmd = new SqlCommand(query, sqlConnection1)) 
    { 
    cmd.Parameters.Add("@room_id", System.Data.SqlDbType.Int); 
    cmd.Parameters["@room_id"].Value = roomid; 
    sqlConnection1.Open(); 
    if (cmd.ExecuteScalar() != null) 
    { 
     roominspiration = (byte)cmd.ExecuteScalar(); 
    } 
    } 
} 

所有我想要做的是更新「roominspiration」的該記錄的任何值值在數據庫中。數據庫中的字段是一個默認值爲0的數據類型。它始終設置正確,所以這不應該是一個返回null的問題。

任何人都可以發現我做錯了什麼,或者是否有更好的方式來做我正在做的事情。我的C#技能不太好,但我正在努力學習!

謝謝大家!

回答

5

我想你想在這裏使用.NET數據類型bool

所以,

bool roominspiration = false; 
query = "SELECT room_inspiration FROM Room WHERE room_id = @room_id); SELECT SCOPE_IDENTITY();"; 
using (sqlConnection1) 
{ 
    using (SqlCommand cmd = new SqlCommand(query, sqlConnection1)) 
    { 
    cmd.Parameters.Add("@room_id", System.Data.SqlDbType.Int); 
    cmd.Parameters["@room_id"].Value = roomid; 
    sqlConnection1.Open(); 
    roominspiration = ((bool?)cmd.ExecuteScalar()).GetValueOrDefault(); 
    } 
} 
+0

HTTP: //msdn.microsoft.com/en-us/library/ms131092.aspx – Oded 2012-01-13 19:27:53

+0

嗯,這一行是錯誤的:roominspiration =((bool?)cmd.ExecuteScalar())。GetValueOrDefault(); 如果我將該行註釋掉,但沒有註釋則會出錯。 – Dan 2012-01-13 19:41:49

+0

其實,我完全不好 - 查詢中有語法錯誤!感謝您的幫助 - 現在布爾方式很好地工作。 – Dan 2012-01-13 19:56:14

1

你還可以做些什麼來轉換位爲BOOL是 保持定義爲字節roominspiration並在年底 轉換它像

roominspiration = ConvertToBoolean(the value you are wanting to convert);