C # int?Параметр - данные равны нулю.Этот метод или свойство нельзя вызывать для значений Null - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь вызвать хранимую процедуру, которая имеет параметр 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...