SqlDataReader Чтение немного типа данных из SQL Server 2008? - PullRequest
6 голосов
/ 13 июля 2011

Я использую SQL Server 2008 в программе asp.net/c#.Я пытаюсь использовать SqlDataReader для извлечения данных из БД, но я не уверен, что использовать для типа данных "бит".

//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», но я не до конца понимаю, как он работает или подходит ли он для этой ситуации?

Мы ценим постоянную помощь каждого!

Ответы [ 5 ]

10 голосов
/ 13 июля 2011

A bool - это то, что вы ищете.В зависимости от того, допускает ли таблица базы данных нулевое значение, оно будет bool или bool? для типа, допускающего значение NULL.

(если битовый столбец допускает нулевые значения - во многих случаях вы можете сделать это)

bitValue = reader["MyBitColumn"] as bool? ?? null;

если нет, то:

bitValue = (bool)reader["MyBitColumn"];
9 голосов
/ 13 июля 2011

Бит, хранящийся в базе данных, может фактически иметь три состояния, а не только два: 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)
{
    //...
}
2 голосов
/ 13 июля 2011

Бит может быть извлечен и сохранен в логическом значении. Я использую бит (0 или 1), чтобы указать, активна ли запись. Когда я получаю его в свое приложение C #, я сохраняю его в логической переменной. Это ты спрашиваешь?

1 голос
/ 13 июня 2014

Просто хотел что-то добавить к ответу Джоэла ... ты должен бросить ноль в бул?или вы получаете ошибки с этим утверждением:

var myvar = reader.IsDBNull(reader.GetOrdinal("field_name")) 
            ? (bool?)null
            : reader.GetBoolean(reader.GetOrdinal("field_name"));
0 голосов
/ 15 ноября 2013

Логический тип данных достаточен для чтения битового типа с сервера SQL 2008

...