SqlDataReader Reading a bit datatype from SQL Server 2008?
I am using SQL Server 2008 in a asp.net/c# program. I am trying to use SqlDataReader to fetch the data form the db, but I'm not sure what to use for the datatype开发者_如何学Python "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"));
I found a couple sites that referenced the above "GetSqlBit" but apparently it is not part of the assemblies I'm using. Any suggestions how I can read this "bit" datatype from SQL?
I found a similar datatype using "GetSqlBinary" but I don't fully understand how it works or if it would be appropriate for this situation?
Everyone's ongoing help is appreciated!
A bool
is what you are looking for. Depending on whether the database table allows a null value, it will be bool
or bool?
for a nullable type.
(if the bit column allows nulls -- many ways you can do this)
bitValue = reader["MyBitColumn"] as bool? ?? null;
if not, then:
bitValue = (bool)reader["MyBitColumn"];
A bit stored in a database can actually have three states, not just two: 0, 1, and NULL. For this reason, the type you want is a Nullable<bool>
, or the bool?
shorthand.
However, it looks like you want the .GetBoolean()
method. That method requires you to check for null before calling the method. The code might look like this:
bool? Line_Name = rdr2.IsDBNull(rdr2.GetOrdinal("Line_Name"))?null:rdr2.GetBoolean(rdr2.GetOrdinal("Line_Name"));
if (Line_Name != null && Line_Name.Value)
{
//...
}
A bit can be retrieved and stored in a boolean. I use a bit (0 or 1) to indicate whether a record is active. When I retrieve it into my C# app, I store it in a boolean variable. Is that you're asking?
Just wanted to add something to Joel's answer... you have to cast the null to a bool? or you get errors with that statement:
var myvar = reader.IsDBNull(reader.GetOrdinal("field_name"))
? (bool?)null
: reader.GetBoolean(reader.GetOrdinal("field_name"));
Boolean datatype is sufficient to read bit datatype from sql server 2008
精彩评论