【问题标题】:Null exception while calling a database to populate datagrid rows [duplicate]调用数据库填充数据网格行时出现空异常[重复]
【发布时间】:2015-11-27 13:05:58
【问题描述】:

所以在下面的代码中我应该能够连接到数据库,然后将该数据库输出到数据网格供用户查看。 然而实际发生的是,一旦代码遇到Load 方法,它就会抛出一个空错误。我不知道为什么,如果你们能解释为什么我没有正确提取数据,我将不胜感激...... 有问题的行是这样的:

List<Users> _users = UserRepository.GetUsers();

我的代码是这样的:

DBDisplay.xaml.cs

public partial class DBDisplay : Window
{
    public DBDisplay()
    {
        InitializeComponent();
        var viewModel = new DbDisplayViewModel();
        viewModel.UserRepository = new UserRepository();
        this.DataContext = viewModel;
    }
}

DBDisplayViewModel.cs

public class DbDisplayViewModel
{
    private ObservableCollection<Users> _users;

    public IUserRepository UserRepository{ get; set; }

    public DbDisplayViewModel()
    {
        Load();
    }



    public ObservableCollection<Users> Users
    {
        get
        {
            if (_users == null)
            {
                _users = new ObservableCollection<Users>();
            }

            return _users;
        }
        set
        {
            if (value != null)
            {
                _users = value;
            }
        }
    }

    private void Load()
    {
        List<Users> _users = UserRepository.GetUsers(); // THIS IS THE BROKEN LINE THAT THROWS A NULL ERROR
        Users = new ObservableCollection<Users>(_users);
    }
}

UserRepository.cs

    public class UserRepository : IUserRepository
{
    private string connectionStr;

    public System.Data.SqlClient.SqlConnection connectionToDB;

    private System.Data.SqlClient.SqlDataAdapter dataAdapter;

    public void openConnection()
    {
        // create the connection to the database as an instance of System.Data.SqlClient.SqlConnection
        connectionToDB = new System.Data.SqlClient.SqlConnection(connectionStr);

        //open the connection
        connectionToDB.Open();
    }


    // Get the data set generated by the sqlStatement
    public System.Data.DataSet getDataSet(string sqlStatement)
    {
       dataAdapter = new System.Data.SqlClient.SqlDataAdapter(sqlStatement, connectionToDB);

        // create the dataset
        var dataSet = new System.Data.DataSet();

        dataAdapter.Fill(dataSet);

        //return the dataSet
        return dataSet;
    }
    public List<Users> GetUsers()
    {
        connectionToDB = new System.Data.SqlClient.SqlConnection(connectionStr);
        connectionToDB.Open();
        List<Users> userlist = new List<Users>();
        DataSet ds = getDataSet("Select UserID, FirstName, LastName from UserData");
        Users users;

        foreach (DataRow row in ds.Tables[0].Rows)
        {
            users = new Users
            {
                UserID = row["UserID"].ToString(),
                FirstName = row["FirstName"].ToString(),
                LastName = row["LastName"].ToString()
            };


            userlist.Add(users);
        }

        return userlist;

    }


}

Users.cs 只是有一些属性 IUserRepository 有一个用户存储库的 get set 方法

【问题讨论】:

  • 它会抛出一个空错误你的意思是NullReferenceException?
  • 是的,额外的信息是“对象引用未设置为对象的实例。”

标签: c# wpf xaml datagrid database-connection


【解决方案1】:

您正在从构造函数调用Load。那个时候UserRepository还是null(你在构造函数调用之后设置)。

将存储库提供给构造函数并从那里进行设置。

public DbDisplayViewModel(IUserRepository repository)
{
    this.UserRepository = repository;

    this.Load();
}

必读:What is a NullReferenceException, and how do I fix it?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多