c# - DataTable 返回空 WPF
问题描述
我想根据在 ComboBox 中选择的值在数据网格中显示数据,但我的数据表函数返回 null 并且数据网格中不显示任何内容。
public DataTable ReadData(User user)
{
using (SqlConnection db = new SqlConnection(AppConnect.Connection))
{
string query = "SELECT moduleCode,moduleName,modCredits,modHrsLeft FROM [Module] WHERE userName=@userName";
try
{
using (SqlCommand command = new SqlCommand(query, db))
{
if (db.State == ConnectionState.Closed)
{
db.Open();
command.Parameters.AddWithValue("@userName", user.UserName);
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
table = new DataTable();
dataAdapter.Fill(table);
}
}
db.Close();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return table;
}
}
此函数位于类库中。该函数在 WPF 项目中被调用,代码如下:
private void BtnDisplay_Click(object sender, RoutedEventArgs e)
{
string userName = CmboxUserN.SelectedItem.ToString();
User user1 = new User
{
UserName = userName
};
DataTable table = data.ReadData(user1);
gridModules.DataContext= table;
}
解决方案
试试这些改变。似乎这条线table = new DataTable();
永远不会被击中。您无需检查以确保连接处于关闭状态,因为您正在使用using
语句。
public DataTable ReadData(User user)
{
using (SqlConnection db = new SqlConnection(AppConnect.Connection))
{
string query = "SELECT moduleCode,moduleName,modCredits,modHrsLeft FROM [Module] WHERE userName=@userName";
try
{
using (SqlCommand command = new SqlCommand(query, db))
{
db.Open();
command.Parameters.AddWithValue("@userName", user.UserName);
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
table = new DataTable();
dataAdapter.Fill(table);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return table;
}
}
此外,您不需要.Close()
连接,因为SqlConnection
它在 using 语句中,这意味着当退出 using 语句的范围时,对象将被释放。
另一个提示:您应该更改代码以让 try catch 围绕着每个问题,如果有任何错误,请将错误记录到控制台并返回一个new DataTable()
.