积极答复者
我刚学C#,在这个三层里调用有点晕,麻烦老师们给看一下。

问题
-
我想从数据库读取数据到XAML界面里,我刚学基础,我有点迷糊。麻烦老师们给看看错在哪。
XAML:
private void Window_Loaded(object sender, RoutedEventArgs e) { PersonnelDAL pdal = new PersonnelDAL(); cbo_PersonnelDepartment.ItemsSource = pdal.GetDepartment(); }
DAL:
public void GetDepartment() { SqlHelper.ExecuteReader("select * from department"); }
SqlHelper:
public static object ExecuteReader(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; using (SqlDataReader sdr = cmd.ExecuteReader()) { while (sdr.Read()) { cmd.Parameters.AddRange(parameters); } } return parameters; } } }
C#初学者!~~~
答案
-
你好。
首先跟你确认一下,cbo_PersonnelDepartment 是ComboBox类型吧?
问题出在DAL的GetDepartment()方法上,这个方法你并没有返回值,所以cbo_PersonnelDepartment.ItemsSource并未被赋值。
应该把方法返回值修改为List<T>或类似的列表类型,这就需要把数据库查询后的DataTable或者DataSet的数据装入你的List<T>中。
另外你的SqlHelper的ExecuteReader方法也有问题,返回值不该是parameters,因为它是拼接sql语句的参数而已。
这里给你提供几个关于SQL操作的文章吧:
Retrieving Data Using a DataReader
希望我的答案能帮助更多的人。
- 已标记为答案 呆oO 2014年8月4日 1:27
全部回复
-
你好。
首先跟你确认一下,cbo_PersonnelDepartment 是ComboBox类型吧?
问题出在DAL的GetDepartment()方法上,这个方法你并没有返回值,所以cbo_PersonnelDepartment.ItemsSource并未被赋值。
应该把方法返回值修改为List<T>或类似的列表类型,这就需要把数据库查询后的DataTable或者DataSet的数据装入你的List<T>中。
另外你的SqlHelper的ExecuteReader方法也有问题,返回值不该是parameters,因为它是拼接sql语句的参数而已。
这里给你提供几个关于SQL操作的文章吧:
Retrieving Data Using a DataReader
希望我的答案能帮助更多的人。
- 已标记为答案 呆oO 2014年8月4日 1:27
-
最终按你的意思实现了,特别开心啊,这就是编程乐趣所在。
麻烦你看一下有没有需要改进的地方,谢谢;
XAML:
private void Window_Loaded(object sender, RoutedEventArgs e) { PersonnelDAL pdal = new PersonnelDAL(); cbo_PersonnelDepartment.ItemsSource = pdal.GetDepartment(); }
DAL:
public List<string> GetDepartment() { List<string> Department = new List<string>(); Department = (List<string>)SqlHelper.ExecuteReader("select * from department"); return Department; }
SqlHelper:
public static object ExecuteReader(string sql) { List<string> Department = new List<string>(); using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; DataTable dt = new DataTable(); using (SqlDataReader sdr = cmd.ExecuteReader()) { while (sdr.Read()) { Department.Add(sdr.GetString(1)); } } return Department; } } }
C#初学者!~~~
-
#region 获取报修记录 /// <summary> /// 根据 ID 得到 List<RepairLogModel> /// </summary> /// <param name="ID">ID</param> /// <return>List<RepairLogModel><return> public List<Model.RepairLogModel> GetRepairLogModels(int RecordID) { try { List<Model.RepairLogModel> info = new List<Model.RepairLogModel>(); string sql = "select [ID],[RecordID],[ITSname],[Operate],[Remark],[CreateDate] from [RepairLog] where [RecordID]=@RecordID order by [CreateDate] asc"; SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.CONN_STRING, System.Data.CommandType.Text, sql, new SqlParameter("@RecordID", RecordID)); while (reader.Read()) { Model.RepairLogModel item = new Model.RepairLogModel(); item.ID = reader.IsDBNull(0) ? 0 : (int)reader[0]; item.RecordID = reader.IsDBNull(1) ? 0 : (int)reader[1]; item.ITSname = reader.IsDBNull(2) ? "" : (string)reader[2]; item.Operate = reader.IsDBNull(3) ? "" : (string)reader[3]; item.Remark = reader.IsDBNull(4) ? "" : (string)reader[4]; item.CreateDate = reader.IsDBNull(5) ? DateTime.Now : Convert.ToDateTime(reader[5]); info.Add(item); } reader.Close(); return info; } catch { return null; } } #endregion
我的DAL是这样写的,Model是实体类库