Наилучшая практика для возврата типа из SQL Server в ExecuteScalar?
В C# SqlCommand - ExecuteScalar
является:
private object CompleteExecuteScalar(SqlDataReader ds, bool returnSqlValue)
Теперь давайте перейдем к SQL Server.
Если я хочу вернуть значение из выбора (который идет в ExecuteScalar
), например:
if record already exists select `-1`
else select `0`
Вопрос:
Какой предпочтительный (по рекомендациям) тип для возврата из SQL Server, чтобы уменьшить количество приведения & tostring() в C#:
if exists(select ....) select '-1' -- string
или же
if exists(select ....) select -1 -- int
1 ответ
Решение
Вы возвращаете номер так int
здесь предпочтительнее по смыслу.
Более того, при разборе ошибки в коде на C# вы должны будете сделать что-то вроде:
enum Error { NO_ERROR = -1, ERROR 1 };
....
Error e = (Error)cmd.ExcecuteScalar();
Это довольно чистый и самообъясняющий код как противоположность синтаксического анализа результата для int или сравнения строковых значений.