Используя объект «Команда SQL», как вы можете проверить, является ли набор результатов пустым? - PullRequest
7 голосов
/ 06 апреля 2009

Используя метод ExecuteScalar в объекте команды SQL, как вы можете проверить, является ли набор результатов пустым? Я использую ASP.net, C # и MS SQL 2008. Прямо сейчас, когда я запускаю следующий код, Response.Write возвращает 0 , когда набор результатов пуст. Но я бы хотел провести различие между 0 и пустыми наборами результатов, поскольку в моей базе данных есть фактические значения 0 .

Вот текущий код:

cmd = new SqlCommand("usp_test", cn);
cmd.CommandType = CommandType.StoredProcedure;

cn.Open();
TestOuput = Convert.ToInt32(cmd.ExecuteScalar());
cn.Close();

Response.Write(TestOutput);

Спасибо.

Ответы [ 6 ]

12 голосов
/ 06 апреля 2009

Проверьте определение ExecuteScalar . Он возвращает объект, который будет иметь нулевую ссылку, если набор результатов будет пустым.

Причина, по которой вы видите ноль, заключается в том, что Convert.ToInt32 возвращает ноль, если дано null. Вам необходимо проверить возвращаемое значение из ExecuteScalar, прежде чем преобразовать его в int.

3 голосов
/ 06 апреля 2009

DbCommand.ExecuteScalar () возвращает первый столбец первой строки или ноль, если результат пуст. Ваша проблема вызвана Convert.ToInt32 (), потому что он возвращает 0 для нуля.

Необходимо проверить значение, возвращаемое ExecuteScalar (), для нулевого значения и вызывать Convert.ToInt32 (), только если оно не равно нулю.

Object result = command.ExecuteScalar();

if (result != null)
{
   Int32 value = Convert.ToInt32(result);
}
else
{
   // Handle the empty result set case
}
0 голосов
/ 03 февраля 2014
cmd = new SqlCommand("usp_test", cn);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
Object outPut=cmd.ExecuteScalar();
if(outPut!=null)
TestOuput = Convert.ToInt32(outPut);
else
//Return Empty Set
cn.Close();

Response.Write(TestOutput);
0 голосов
/ 06 апреля 2009

ExecuteScalar возвращает null, если набор результатов пуст (как сказал @ fallen888 и др.). Причина, по которой вы видите ноль, заключается в том, что Convert.ToInt32 возвращает ноль, если дано null. Вам необходимо проверить возвращаемое значение из ExecuteScalar, прежде чем преобразовать его в int.

0 голосов
/ 06 апреля 2009

Выполнить скаляр вернет первый столбец первой строки в наборе результатов. Если результатов нет, он должен вернуть ноль.

Я предполагаю, что ваша хранимая процедура возвращает счет, а не набор данных, поэтому вы видите 0.

0 голосов
/ 06 апреля 2009

Как видите, здесь вы можете проверить, равен ли результат нулю:

Тип возвращаемого значения: System.Object Первый столбец первого ряда в результирующий набор или нулевая ссылка (Ничего в Visual Basic), если Набор результатов пуст.

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