用VS2010在win7系统下做了一个小程序使用的是sqlite数据库,office用的是2010。
问题:
1.在win7 64位和32位下对excel文件能正常导入和导出,但是部署到XP系统下导入时会提示无法打开数据库,但是添加操作却是正常的(导入和添加调用的是一个方法)。
2.导出操作在win7也下能正常使用,部署到XP上之后我做增删改查都没有问题。当我点击导出按钮将数据导出到excel中之后(能正常导出) 再进行增删改查操作时就会提示无法打开数据库。估计和导入是同一个问题。
这是从datagridview导出到excel代码:
//导出到execl
try
{
//没有数据的话就不往下执行
if (dataGridView1.Rows.Count == 0)
return;
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel文件|*.xlsx";
saveDialog.FileName = "KNCVI";
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消 //实例化一个Excel.Application对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写
//excel.Visible = false; //生成Excel中列头名称
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
}
//把DataGridView当前页的数据保存在Excel中
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
}
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
excel.Quit();
GC.Collect();
KillProcess("EXCEL");
MessageBox.Show("导出成功", "提示");
}
catch (Exception ex)
{
KillProcess("EXCEL");
MessageBox.Show(ex.Message, "错误提示");
}这是将excel导入到datagridview中的代码:
string strConn; strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strConn);
Conn.Open();
System.Data.DataTable sTable = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = sTable.Rows[0][2].ToString().Trim();
System.Data.DataTable dt = new System.Data.DataTable();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + tableName + "]", strConn); try
{
oada.Fill(dt);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
Conn.Close();winformexcelsqlitevs2010
问题:
1.在win7 64位和32位下对excel文件能正常导入和导出,但是部署到XP系统下导入时会提示无法打开数据库,但是添加操作却是正常的(导入和添加调用的是一个方法)。
2.导出操作在win7也下能正常使用,部署到XP上之后我做增删改查都没有问题。当我点击导出按钮将数据导出到excel中之后(能正常导出) 再进行增删改查操作时就会提示无法打开数据库。估计和导入是同一个问题。
这是从datagridview导出到excel代码:
//导出到execl
try
{
//没有数据的话就不往下执行
if (dataGridView1.Rows.Count == 0)
return;
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel文件|*.xlsx";
saveDialog.FileName = "KNCVI";
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消 //实例化一个Excel.Application对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写
//excel.Visible = false; //生成Excel中列头名称
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
}
//把DataGridView当前页的数据保存在Excel中
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
}
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
excel.Quit();
GC.Collect();
KillProcess("EXCEL");
MessageBox.Show("导出成功", "提示");
}
catch (Exception ex)
{
KillProcess("EXCEL");
MessageBox.Show(ex.Message, "错误提示");
}这是将excel导入到datagridview中的代码:
string strConn; strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strConn);
Conn.Open();
System.Data.DataTable sTable = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = sTable.Rows[0][2].ToString().Trim();
System.Data.DataTable dt = new System.Data.DataTable();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + tableName + "]", strConn); try
{
oada.Fill(dt);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
Conn.Close();winformexcelsqlitevs2010
解决方案 »
- 求推荐c#方面的书
- C# 控制台 如何清楚输入内容
- 关于线程用线程刷新界面,界面会卡死``急`在线等帮助!!
- C#镜像问题
- 求教:VS 2005 WinForm 程序中DataGridView 和 DataBindingSource 的关联问题
- Substring的问题
- C#中用什么函数可以返回某一字符串从另一字符串的左/右侧开始算起第一次出现的位置
- 求助,C#实现二进制文件读写
- 下载javascript:__doPostBack链接的文件
- 一个winform程序,使用了this.close()为何在后台中还能看到这个进程?
- C# 按住键盘某个键的同时点击鼠标触发事件该如何实现,求高人指点,感谢!
- 【已解决】adobe flash player for IE 11.8 中文乱码 问题
这里有问题,是看看winxp有没有所谓的OLEDB.12.0,应该只有一个4.0