前辈们,求传授! 问:我用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);
}
}