SqlDataReader从SQL Server 2008中读取位数据类型
本文关键字:读取 数据类型 2008 SQL Server SqlDataReader | 更新日期: 2023-09-27 18:01:53
我在一个asp.net/c#程序中使用SQL Server 2008。我试图使用SqlDataReader从数据库中获取数据,但我不确定该使用什么数据类型"bit"。
//these are the assemblies i added manually
using System.Web.Script.Services;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ucsConnectionString"].ConnectionString);
SqlDataReader rdr2 = null;
conn2.Open();
SqlCommand cmder = new SqlCommand("usp_Device_GetBy_DeviceID", conn2);
cmder.Parameters.AddWithValue("@ID", id);
cmder.CommandType = CommandType.StoredProcedure;
rdr2 = cmder.ExecuteReader();
rdr2.Read();
*insert datatype & var* = rdr2.GetSqlBit(rdr2.GetOrdinal("Line_Name"));
我发现了几个引用上述"GetSqlBit"的网站,但显然它不是我使用的程序集的一部分。任何建议我如何从SQL读取这个"位"数据类型?
我发现一个类似的数据类型使用"GetSqlBinary",但我不完全理解它是如何工作的,或者它是否适合这种情况?
感谢每个人的持续帮助!
您正在寻找的是bool
。根据数据库表是否允许空值,对于可空类型,它将是bool
或bool?
。
(如果位列允许为空——有很多方法可以做到这一点)
bitValue = reader["MyBitColumn"] as bool? ?? null;
如果没有,则:
bitValue = (bool)reader["MyBitColumn"];
存储在数据库中的位实际上可以有三种状态,而不仅仅是两种:0、1和NULL。出于这个原因,您想要的类型是Nullable<bool>
,或bool?
简写。
然而,看起来你想要.GetBoolean()
方法。该方法要求您在调用该方法之前检查是否为空。代码可能看起来像这样:
bool? Line_Name = rdr2.IsDBNull(rdr2.GetOrdinal("Line_Name"))?null:rdr2.GetBoolean(rdr2.GetOrdinal("Line_Name"));
if (Line_Name != null && Line_Name.Value)
{
//...
}
可以检索并存储为布尔值。我使用位(0或1)来指示记录是否处于活动状态。当我把它检索到我的c#应用程序时,我把它存储在一个布尔变量中。这是你想问的吗?
只是想给Joel的回答补充一些东西…你必须将null转换为bool吗?或者语句出现错误:
var myvar = reader.IsDBNull(reader.GetOrdinal("field_name"))
? (bool?)null
: reader.GetBoolean(reader.GetOrdinal("field_name"));
布尔数据类型足以从sql server 2008中读取位数据类型