【发布时间】: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