最近在做一个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个字段给用户自定义,,,这个功能又怎么实现?
分不多了,希望得到高手指点..............
我准备这样实现:
读取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个字段给用户自定义,,,这个功能又怎么实现?
分不多了,希望得到高手指点..............
解决方案 »
- 如何给强类型DATASET赋值?
- C#右边冒出QQ类似的窗口
- 请教:关于字段初始化的问题
- 代码运行一个程序的问题 vsto EXCEL程序不退出 为什么不能在运行一个eXCEL
- 管理员 用户
- ☆☆☆☆☆★C#中的UserControl问题——如何映射事件★☆☆☆★急问求解!☆☆☆☆☆☆☆☆☆☆☆☆☆☆
- 怎样把winform 的textbox里的内容拖放到另一个textbox ,请高手给各式列?
- C#自定义线控件
- .net环境配置问题?
- 请问大侠:怎么用c#写一个com+组件,怎么用c#调用一个com+组件?
- AxShockwaveFlash与Flash10i.ocx、InstallShield的三角恋
- how can delegate be added to event at run time ?
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;
}
额,不是写到Excel里,是Access