前辈们,求传授! 问:我用C#开发的一个应用程序,主要模式是 EXCEL导入至DataGirdView中,再后台读入至SQL中,我目前是先维护SQL表的字段与导入的EXCEL列字段是对应的数量。 但,问题来了,我想在SQL中将所有可能会导入的字段(所有的)信息维护进去,EXCEL的字段只需在对应的字段(其中部分)中找到信息存储进去。
public void ExcelToDataGridView(string filePath, DataGridView dgv)
{
/*我的思路是,从excel中把所有的行都到,excel中第一样是字段的value,第二行是字段的name
然后通过程序生成dataGridView1的列,而不是你原来的是在dataGridView1中写死的列这样的
话就是以excel中的列数为准,就不会出现索引超出范围的错误
*/
DataSet ds = Exceldq(filePath);
DataTable dt = new DataTable();
//这个就是通过excel的第一行和第二行生成 datatable 的列
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
DataColumn dc = new DataColumn();
dc.DefaultValue = ds.Tables[0].Rows[0][i].ToString();
dc.ColumnName = ds.Tables[0].Rows[1][i].ToString();
dt.Columns.Add(dc);
}
//删除几行就复制几个下面的语句
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[0]);//删除第一行
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[0]);//珊瑚第二行 foreach (DataRow excelRow in ds.Tables[0].Rows)
{
int i = 0;
DataRow dr = dt.NewRow();
foreach (DataColumn dc in dt.Columns)
{
dr[dc] = excelRow[i];
i++;
}
dt.Rows.Add(dr);
}
zhu.DataSource = dt;
//利用循环语句,根据输入的EXCEL信息,逐行录入数据库
DataTable table = (DataTable)zhu.DataSource; for (int i = 0; i < table.Rows.Count; i++)
{
//数据库中维护的表名与字段名
string sql = "insert into zhu(BSM,SJDM,SJ,XJDM,X,XZDM,XZ,FZ,YJQMC,EJQMC,SJQMC) values";
string sqlvalue = "";
for (int j = 0; j < table.Columns.Count; j++)
{ string aa = table.Rows[i][j].ToString();
if (sqlvalue.Equals(""))
{
sqlvalue = "'" + aa + "'";
}
else
{
sqlvalue += ",'" + aa + "'";
}
}
sql = sql + " (" + sqlvalue + ")";
//调用Sql添加方法
fdzs.lei.zhufangfa zz = new lei.zhufangfa();
zz.add(sql);
//MessageBox.Show(sql);
}
}
public void ExcelToDataGridView(string filePath, DataGridView dgv)
{
/*我的思路是,从excel中把所有的行都到,excel中第一样是字段的value,第二行是字段的name
然后通过程序生成dataGridView1的列,而不是你原来的是在dataGridView1中写死的列这样的
话就是以excel中的列数为准,就不会出现索引超出范围的错误
*/
DataSet ds = Exceldq(filePath);
DataTable dt = new DataTable();
//这个就是通过excel的第一行和第二行生成 datatable 的列
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
DataColumn dc = new DataColumn();
dc.DefaultValue = ds.Tables[0].Rows[0][i].ToString();
dc.ColumnName = ds.Tables[0].Rows[1][i].ToString();
dt.Columns.Add(dc);
}
//删除几行就复制几个下面的语句
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[0]);//删除第一行
ds.Tables[0].Rows.Remove(ds.Tables[0].Rows[0]);//珊瑚第二行 foreach (DataRow excelRow in ds.Tables[0].Rows)
{
int i = 0;
DataRow dr = dt.NewRow();
foreach (DataColumn dc in dt.Columns)
{
dr[dc] = excelRow[i];
i++;
}
dt.Rows.Add(dr);
}
zhu.DataSource = dt;
//利用循环语句,根据输入的EXCEL信息,逐行录入数据库
DataTable table = (DataTable)zhu.DataSource; for (int i = 0; i < table.Rows.Count; i++)
{
//数据库中维护的表名与字段名
string sql = "insert into zhu(BSM,SJDM,SJ,XJDM,X,XZDM,XZ,FZ,YJQMC,EJQMC,SJQMC) values";
string sqlvalue = "";
for (int j = 0; j < table.Columns.Count; j++)
{ string aa = table.Rows[i][j].ToString();
if (sqlvalue.Equals(""))
{
sqlvalue = "'" + aa + "'";
}
else
{
sqlvalue += ",'" + aa + "'";
}
}
sql = sql + " (" + sqlvalue + ")";
//调用Sql添加方法
fdzs.lei.zhufangfa zz = new lei.zhufangfa();
zz.add(sql);
//MessageBox.Show(sql);
}
}
解决方案 »
- 江湖救急-->画图问题
- C# GSM 长短信开发 俺用wavecome 的猫猫 有例子的最好主要是长短信的发送问题搞不掂不够再加分
- ReporView导出MSChart,如何在柱形图上显示y值?
- TreeView 选中节点怎样改变节点背景图片呢?
- 如何循环删除一些列的临时表?
- !!!!!!!数据的固定排序
- 这个框很难输入文字,没顶尖高手不行,真是不假!~~
- 请教:如何用c#实现从一个网页自动获取一部分数据。
- 高手求救
- 急!!怎样操作WORD文档?100分
- WPF DatePicker WIN7下不兼容问题 必须要把时间格式设置yyyy-M-d 求不需要转换怎么获取
- C# winform datagridview 列标题列能承载控件吗
我只能导入在EXCEL限制好的字段,如果加减字段,与之前数据库中维护的字段名不一样,就不行了。