实际表格是这样
但是程序读出来是这样
为什么会这样,求指导啊
但是程序读出来是这样
为什么会这样,求指导啊
解决方案
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 存储吧