【问题标题】:System.ArgumentNullException: 'Value cannot be null. Parameter name: providerInvariantName'System.ArgumentNullException: '值不能为空。参数名称:providerInvariantName'
【发布时间】:2021-02-28 03:43:58
【问题描述】:

我正在尝试使用 N 层架构创建一个 c# 应用程序。 这是我在数据库中插入记录的业务层方法。

public static bool AddEmployeeBL(Employee newEmployee)
        {
            bool employeeAdded = false;
            try
            {
                if(ValidateEmployee(newEmployee))
                {
                    EmployeeDAL employeeDAL = new EmployeeDAL();
                    employeeAdded = employeeDAL.AddEmployeeDAL(newEmployee);
                }
            }
            catch (MyException ex)
            {
                throw ex;
            }
            
catch (Exception ex)
            {
                throw ex;
            }

            return employeeAdded;
        }

异常发生在最后一个 catch 块中的 throw ex 语句处。

DAL类方法如下,这里是添加数据的方法。

public bool AddEmployeeDAL(Employee newEmployee)
        {
            bool employeeAdded = false;

        try
        {
            DbCommand command = DataConnection.CreateCommand();
            command.CommandText = "uspAddEmployee";

            DbParameter param = command.CreateParameter();
            param.ParameterName = "@UserId";
            param.DbType = DbType.Int32;
            param.Value = newEmployee.UserId;
            command.Parameters.Add(param);

            param = command.CreateParameter();
            param.ParameterName = "@Name";
            param.DbType = DbType.String;
            param.Value = newEmployee.Name;
            command.Parameters.Add(param);

            int affectedRows = DataConnection.ExecuteNonQueryCommand(command);

            if (affectedRows > 0)
            {
                employeeAdded = true;
            }

        }
        catch (DbException ex)
        {
            string errorMessage = string.Empty;                
                    errorMessage = ex.Message;
            
            throw new MyException(errorMessage);
        }
        return employeeAdded;
    }

配置类: 公共类 MyConfiguration

static string providerName;

private static string connectionString;
public static string ConnectionString { get => connectionString; set => connectionString = value; }
public static string ProviderName { get => providerName; set => providerName = value; }

public MyConfiguration()
{
    providerName = ConfigurationManager.ConnectionStrings["Connection"].ProviderName;
    connectionString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
}

}

【问题讨论】:

  • 开启 First Chance Exceptions 看看到底抛出了什么。这就是为什么不捕获异常并像那样重新抛出它们的原因。如果您不处理异常,根本不要捕获它,如果您必须重新抛出,那么只需 throw;
  • 这能回答你的问题吗? What is a NullReferenceException, and how do I fix it? 是的,我知道这不是完全相同的例外

标签: c# ado.net


【解决方案1】:

只需将公共构造函数更改为静态,它就会获取连接详细信息。

static TravelBookingConfiguration()
        {
            providerName = ConfigurationManager.ConnectionStrings["travelBookingConnection"].ProviderName;
            connectionString = ConfigurationManager.ConnectionStrings["travelBookingConnection"].ConnectionString;
        }

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2018-06-03
    • 2010-11-11
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多