2012-01-13 43 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);