SqlDataReader выясняет, можно ли обнулять поле данных - PullRequest
7 голосов
/ 15 апреля 2011

Есть ли способ определить в .NET для любого произвольного набора результатов SQL Server, может ли данный столбец в результате содержать нули?

Например, если у меня есть заявления

Select NullableColumn From MyTable

и

Select IsNull(NullableColumn, '5') as NotNullColumn From MyTable

и я получаю такой читатель:

var cmd = new SqlCommand(statement, connection);
var rdr = cmd.ExecuteReader();

могу ли я иметь такую ​​функцию?

bool ColumnMayHaveNullData(SqlDataReader rdr, int ordinal)
{
   //????
}

Я хочу, чтобы он возвращал true для первого оператора и false для второго.

rdr.GetSchemaTable() не работает для этого, потому что он возвращает, может ли нижележащий столбец быть нулевым, а это не то, что я хочу. В datareader есть функции, которые возвращают базовый тип sql поля, но, похоже, ни одна из них не говорит мне, может ли оно быть нулевым.

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

К сожалению, вы не можете этого сделать, потому что SQL-сервер не может определить, является ли поле пустым или нет. Вы можете выполнять произвольные преобразования для полей в наборе результатов (операторы, вызовы функций и т. Д.), И эти преобразования не содержат метаданных о том, могут ли они возвращать нуль или нет. Таким образом, вы должны выяснить это вручную или использовать представления с привязкой к схеме ...

1 голос
/ 15 апреля 2011

Я немного запутался:

"не работает для этого, потому что возвращает, может ли нижележащий столбец быть нулевым, а это не то, что я хочу."

"но, кажется, никто не говорит мне, может ли оно быть нулевым .."

Вы можете запросить базовую таблицу, чтобы узнать, является ли столбец пустым (при условии, что это то, что вам нужно).

SELECT IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'MyColumn'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...