Я пытаюсь вызвать хранимую процедуру, которая имеет параметр INT (BusinessID) и разрешает NULL.Из моего кода C # я не могу понять, являются ли данные нулевыми, как их идентифицировать и передать.Я перечислил три техники, которые я пробовал, пронумерованные # 1, # 2, # 3 и ошибки, которые я получаю.Пожалуйста, руководство Вот мой пример кода:
private static DataRow ValidateRecord (string ProjectNum, int? BusinessID)
{
DataRow returnRow = null;
using (SqlConnection connection = Connection.GetConnection())
{
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
try
{
using (SqlCommand command = new SqlCommand(
"[dbo].[mySQLProc]", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.CommandTimeout = 90;
command.Parameters.Add("@ProjectNum", SqlDbType.VarChar, 17).Value = ProjectNum;
// #1 – error: "Data is Null. This method or property cannot be called on Null values."
//if (!BusinessID.HasValue)
//{
// BusinessID = (int)System.Data.SqlTypes.SqlInt32.Null;
//}
//#2 - "Data is Null. This method or property cannot be called on Null values."
if (BusinessID == null)
{
BusinessID = (int)System.Data.SqlTypes.SqlInt32.Null;
}
//#3 - error on compile time – Type of conditional expression cannot be determined because
// there is no implicit converstion between ‘System.DBNull’ and ‘int?’
// BusinessID = BusinessID == null ? DBNull.Value : BusinessID;
command.Parameters.Add("@BusinessID", SqlDbType.Int).Value = BusinessID;
command.ExecuteNonQuery();
connection.Close();
returnRow = CreateDataRow(ProjectNum, BusinessID);
}
}
catch (Exception ex)
{
throw ex;
}
return returnRow;
}
}