最近在做一个excel导入access的winform程序,要将excel格式的文件导入access通迅录中.
我准备这样实现:
读取excel到dataSet中,再将excel中的列与access中的字段映射,,,最后存入到access
现在最到头疼的问题了,数据库access设置了35个字段,而用户的excel文件只有几个字段,本意是只要把必填的字段对应上就可以了
其他的可以为空,也可以进行字段映射.
在写入数据库时,用for循环将每条记录写入数据库问题就在这里了
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
                {
                    //插入语句
                    OleDbCommand cmd1 = new OleDbCommand("insert into PhoneBook(username,phone) values( \'" + dataSet.Tables[0].Rows[i]["" + userName.Text + ""] + "\',\'" +
                                                                                                             dataSet.Tables[0].Rows[i]["" + phone.Text + ""] + "\')", oleDbConnAccess);                    MessageBox.Show(cmd1.CommandText);  //显示语句
                    cmd1.ExecuteNonQuery();          //执行语句 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
字段存在,dataSet.Tables[0].Rows[i]["字段名"] 取出对应字段的值,
如果用户没有映射,字段为空时,,,则报错.......
这怎么处理啊
还是有别的更好的方法写入到数据库中????????另外,我自己准备留10个字段给用户自定义,,,这个功能又怎么实现?
分不多了,希望得到高手指点..............

解决方案 »

  1.   

        #region SaveDataGireViewtoExcel
            public bool SaveDataGireViewtoExcel(DataGridView dgv)
            {
                try
                {
                    //实例化一个Excel.Application对象   
                    Excel.Application excel =
                       new Excel.Application();                //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写   
                    excel.Visible = false;                //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错   
                    excel.Application.Workbooks.Add(true);
                    //生成Excel中列头名称   
                    for (int i = 0; i < dgv.Columns.Count; i++)
                    {
                        excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
                    }
                    //把DataGridView当前页的数据保存在Excel中   
                    for (int i = 0; i < dgv.Rows.Count - 1; i++)
                    {
                        for (int j = 0; j < dgv.Columns.Count; j++)
                        {
                            if (dgv[j, i].ValueType == typeof(string))
                            {
                                excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
                            }
                            else
                            {
                                excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
                            }
                        }
                    }                //设置禁止弹出保存和覆盖的询问提示框   
                    excel.DisplayAlerts = false;
                    excel.AlertBeforeOverwriting = false;                //保存工作簿   
                    excel.Application.Workbooks.Add(true).Save();
                    //保存excel文件   
                    excel.Save("D:" + "\\HBMange.xls");
                    //确保Excel进程关闭   
                    excel.Quit();
                    excel = null;
                    GC.Collect();                return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误提示");
                }            return false;
            }
            #endregion
            /// <summary>
            /// 导出到Excel
            /// </summary>
            /// <param name="dgv">DataGridView对象</param>
            /// <param name="isShowExcel">是否显示Excel界面</param>
            /// <returns></returns>
            public bool DataGridviewShowToExcel(DataGridView dgv, bool isShowExcel)
            {
                if (dgv.Rows.Count == 0)
                    return false;
                //建立Excel对象    
                Excel.Application excel = new Excel.Application();            excel.Application.Workbooks.Add(true);
                excel.Visible = isShowExcel;
                //生成字段名称    
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
                }
                //填充数据    
                for (int i = 0; i < dgv.RowCount - 1; i++)
                {
                    for (int j = 0; j < dgv.ColumnCount; j++)
                    {
                        if (dgv[j, i].ValueType == typeof(string))
                        {
                            excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
                        }
                        else
                        {
                            excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
                        }
                    }
                }
                return true;
            }
      

  2.   


    额,不是写到Excel里,是Access