用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.   

    其实就是为什么再将excel中的数据添加到datagridview中之后我在调用插入语句时提示打不开数据库文件
      

  2.   

    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";  
     这里有问题,是看看winxp有没有所谓的OLEDB.12.0,应该只有一个4.0
      

  3.   

    4.0也不行我试过了而且4.0还有office版本的问题。但是导出操作没有用到这个啊为什么导出后也提示同样的问题“无法打开数据库文件”
      

  4.   

    估计是版本问题,XP相对于office2010版本来说,版本太高了,不知道数据库引警是否支持,是个问题?office2010是64位,而xp是32位,可能打开不支持到64位
      

  5.   

    Office 的版本是多少的呢? 使用Ado.NET技术访问Excel的时候经常会出现数据驱动不正确的情况的
      

  6.   

    问题已解决是路径问题,获取一下工程文件目录就好了。string path = Application.StartupPath;