private  void TransferData(string excelFile, string sheetName, string connectionString) 
        { 
            DataSet ds = new DataSet(); 
            try 
            { 
                //获取全部数据 
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;"; 
                OleDbConnection conn = new OleDbConnection(strConn); 
                conn.Open(); 
                string strExcel = ""; 
                OleDbDataAdapter myCommand = null; 
                strExcel = string.Format("select * from [{0}$]", sheetName); 
                myCommand = new OleDbDataAdapter(strExcel, strConn); 
                myCommand.Fill(ds, sheetName);                 //用bcp导入数据 
                using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString)) 
                { 
                    bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied); 
                    bcp.BatchSize = 1;//每次传输的行数 
                    bcp.NotifyAfter = 1;//进度提示的行数 
                    bcp.DestinationTableName = "Staff_Msg";//目标表 
                    bcp.WriteToServer(ds.Tables[0]); 
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }             }             //进度显示 
            void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e) 
            { 
                this.Text = e.RowsCopied.ToString(); 
                this.Update(); 
            }  private void btnInput_Click(object sender, EventArgs e)
        {
            string p = IniReadValue("StandIni", "ExportStaffForPath", configPath);
            TransferData(p,"Sheet1",sql); 
        }数据库中只有1列【年龄】是int类型,还有两个是bit类型。Excel里的年龄数据我用过了数值类型,也加过了'.还是提示这个错误,请各位大侠帮我看看是什么原因?小弟初来CSDN,分数不多,请帮帮忙!

解决方案 »

  1.   

    数据源有问题,你还是直接读取EXCEL内容,然后自己写SQL语句插入数据吧,这样可以纠正EXCEL中不正确的数据
      

  2.   

    数据库里有些值为空或NULL
    单元格数据是否存在问题
      

  3.   

    我在网上下载了个例子运行没有问题,但是把代码移到我的里面就不行,还是报告这个错误。郁闷死了!Excel里的数据也改过了还是不行!真搞不懂问题出在哪里?
      

  4.   

    我测试发现如果数据库中的类型是int,那么在Excel对应的字段中值前加个 ' 转成string就可以。但是数据库中是bit类型的,在Excel里应该用什么类型呢?文本、数值都试过了不行!请指教!
      

  5.   

    碰到同样的问题,急死了,测试了很久都不清楚问题出在哪里。我把DataTable数据集里的数据添加到数据库中,字段都完全相同哇,如果DataTable中的int类型的数据值为空,我就循环设置为DBNull.Value了,可是还是报同样的错,真的不清楚问题出在哪里了。
      

  6.   

    终于知道什么原因了哦 - -!!!
    根据
    的话,原来我DataTable里的字段和数据库里的字段位置不是完全一一对应的哦(我也完全没有想到必须要位置一一对应,以为只要 列名 完全相同就好)
    哎,走了很多弯路,不过解决了就好,嘿嘿~
      

  7.   

    我的字段位置对应都对,不能导入的原因是:datatable中的数据有一些后面有空格,导致长度可能超过数据库中定义长度。如何去掉这些空格呢?