实际表格是这样
但是程序读出来是这样
为什么会这样,求指导啊
但是程序读出来是这样
为什么会这样,求指导啊
解决方案
30
首先,下面两句代码要放在循环中,否则 dr 只加载了一行
while (sdr.Read()) { DataRow dr = dt.NewRow(); dt.Rows.Add(dr); }
winform sql 数据操作不建议你这样,很麻烦,给你个示例看看
新建一个form,将代码直接粘贴进去,该数据连接以后运行看效果
protected override void OnLoad(EventArgs e) { base.OnLoad(e); var table = new DataTable("Table"); var bs = new BindingSource { DataSource = table, }; // 作为公共数据源用 nav dgv 的 DataSource 都使用该组件 var nav = new BindingNavigator(true) { Dock = DockStyle.Bottom, BindingSource = bs }; // 数据导航工具栏 var dgv = new DataGridView { DataSource = bs, Dock = DockStyle.Fill }; // AutoGenerateColumns = true Controls.AddRange(new Control[] { dgv, nav }); // 向 Form 添加控件 var cs = "connectionString"; // 链接字符串 using (var cn = new SqlConnection(cs)) { var cmd = cn.CreateCommand(); cmd.CommandText = "exec SP_I_FAT_GetCurrentJob "MXASMTL4""; // 查询 cmd.CommandType = CommandType.Text; // var adapter = new SqlDataAdapter(cmd); // 使用 adapter 只要这么2句代码,datatable 就搞定了 // adapter.Fill(table); cn.Open(); // 使用 adapter 可以不需要显示 open 但 reader 则是必须的 using (var reader = cmd.ExecuteReader()) { // 获取列名和列数据类型以创建 DataColumn // 也可以使用 GetSchemaTable() 方法获取更详细的表结构信息 for (int i = 0; i < reader.FieldCount; i++) table.Columns.Add(reader.GetName(i), reader.GetFieldType(i)); while (reader.Read()) { var row = table.NewRow(); // 用 table 架构新行 object[] arr = row.ItemArray; // 获取行数据数组 arr reader.GetValues(arr); // 利用 GetValues 方法填充 arr table.Rows.Add(arr); // 利用 Rows.Add(object[]) 方法直接将数组 arr 作为行数据填充到表中 } } } // 假如查询的列名需要更改、列宽需要调整,本人看着办咯 foreach (DataColumn column in table.Columns) { // 更换显示的列名 column.ColumnName = string.Format("Column {0}", table.Columns.IndexOf(column)); } }
10
那应该是查询的问题,检查 sql 存储吧