小弟在Excel导入Access的时候...Excel的标头必须和数据库的字段是一样的才能导入,所以很麻烦..小弟求中文标头也可导入的代码....,拜托嘞

解决方案 »

  1.   

    private DataTable XlsToDataTable(String strpath)  
      {  
      string strConn;  
      strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strpath + ";" +  
      "Extended Properties=Excel 8.0;";  
      OleDbConnection conn = new OleDbConnection(strConn);  
      OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);  
      DataTable dt = new DataTable();  
      myCommand.Fill(dt);  
      return dt;  
      }  或
    private void button1_Click(object sender, EventArgs e)  
      {  
      string str="";
      oleDbConnExcel = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Extended properties=Excel 5.0;Data Source=" + Application.StartupPath.Trim() +"\\a.xls");  
      oleDbConnExcel.Open();  
      strGetDataFromExcel = "SELECT * FROM [Sheet1$]";  
      oleDbCmdExcel = new OleDbCommand(strGetDataFromExcel, oleDbConnExcel);  
      oleDbDataReaderExcel = oleDbCmdExcel.ExecuteReader();  
      if (oleDbDataReaderExcel.HasRows == true)  
      {  
      oleDbConnAccess.Open();  
      for (; ; )  
      {  
      if (oleDbDataReaderExcel.Read())  
      {  
      str= "";  
      oleDbCmdAccess = new OleDbCommand(str, oleDbConnAccess);  
      oleDbCmdAccess.ExecuteNonQuery();  
      oleDbCmdAccess.Dispose();  
      }  
      else  
      break;  
      }  
      oleDbConnAccess.Close();  
      }  
      oleDbDataReaderExcel.Close();  
      oleDbCmdExcel.Dispose();  
      oleDbConnExcel.Close();  
      }  
    或直接代码excel模板,遍历数据集,导入excel 
      

  2.   

    小弟在Excel导入Access的时候...Excel的标头必须和数据库的字段是一样的才能导入,所以很麻烦..小弟求中文标头用Vsto,自己读取Excel的每一个列,插入数据库!
      

  3.   


    //获取Excel表格行数
    int iRows = Excel.Worksheet.UsedRange.Rows.Count;
    Excel.Range rngID = SourceSheet.get_Range("A4", "A" + iRows);
    //先计算出编号这一列总共有多少行效数据?
    int i = 1;
    for (; i < iRows; i++)
    {
       if (((Excel.Range)rngID.Cells[i, 1]).Value2 == null)
       break;
    }
    int maxRowIndex = i - 1;
    for (int rowIndex = 3; rowIndex < iRows - 4; rowIndex++)
    {
       //获取每一个字段
       ((Excel.Range)rngID.Cells[rowIndex - 2, 1]).Value2;
       //拼装sql语句插入数据库
    }
      

  4.   

    楼主是说EXCEL的标题和数据库表的列字段必须相同吧,
    这个你可以用OLEDB连接读取EXCEL内容,
    然后读取列信息(假如是第一行),
    然后再根据行检测字段是否与数据库中的表一致,然后再保存数据
      

  5.   

    我的意思是Excel的标头现在都必须是和数据库字段一样才可导入Access,所以想让Excel的标头是中文也可导入Access,
      

  6.   


    电脑没装Access,但是SQL Server是可以导入的,包括中文表头,直接向数据库中导入Sheet1$。这个导入和数据库字段有什么关系。你是不是建好表了,想直接把数据导入到表中?那样的话估计不行。建议直接导入整个表,然后改名不就行了。还有,如果字段数据类型不一致的话,有可能造成导入数据的某些字段为空。例如,你设置的是int型,但是Excel文件中的数据不能转化成int型的话,就为null了
      

  7.   

    最好的办法还是自己逐行读取Excel中的数据,用Insert语句插入也不麻烦,数据类型还不会出错
      

  8.   


    跟表头有关系吗,你要的是导入对应的每一列excel数据到数据表的对应列中,可以从第二行开始取数据,我给的方法,可以的。