8

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 "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!

5 Answers 5

11

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)
{
    //...
}
Sign up to request clarification or add additional context in comments.

3 Comments

I do need to allow nulls (more just for testing..). However, I'm getting errors for using the 'bool?' datatype. I'm using it in an if statement and it says it can't convert from 'bool?' to 'bool'. Do I have to do anything different to use this datatype?
@Joel Coehoorn thanks. That looks like what I need. Definitely need that isDBNull as well. Good stuff.
bool cannot be null. Use Nullable<bool> or Nullable<Boolean>. In sql bit has 3 states: {1,0,NULL}. You can also use false or true instead of null depending on the logic.
11

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"];

Comments

2

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?

1 Comment

I'm assuming you are using the GetBoolean() method to retrieve the value from the db?
1

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"));

Comments

0

Boolean datatype is sufficient to read bit datatype from sql server 2008

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.