日期:2014-05-18  浏览次数:20780 次

导入excel到sqlserver的格式转换问题
DataTable dt = null;
  string connetionStr = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + url + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";
  string strSql = "select * from [不合格单-损失费$]";
  OleDbConnection oleConn = new OleDbConnection(connetionStr);
  OleDbDataAdapter oleAdapter = new OleDbDataAdapter(strSql, connetionStr);
  try
  {
  dt = new DataTable();  
  oleAdapter.Fill(dt);

  return dt;
  }  
string conString = "data source=.;initial catalog=s;integrated security=true";
string sql = "truncate table a";
  SqlConnection con = new SqlConnection(conString);
  SqlCommand cmd = new SqlCommand(sql, con);
  if (con.State == ConnectionState.Closed)
  con.Open();
  cmd.ExecuteNonQuery();
  cmd.Dispose();
  con.Close();
  DataTable dt = CreateExcelDataSource(url); //创建批量DataTable导入Sql  
  SqlBulkCopy copy = new SqlBulkCopy(conString, SqlBulkCopyOptions.UseInternalTransaction); //指定数据库表名  
  copy.DestinationTableName = "a"; //写入Sql  
  copy.WriteToServer(dt);  



我使用以上方法成功将数据从excel导入sqlserver2005了,但是其中有几个字段在数据库里设置的是日期格式,float格式,通过这种批量导入的方法就无法正常导入会报错,而且带小数点的存到数据库中转化成float时数值会改变,比如158.854在数据库中变成了158.8539999999... 求高手指教怎么设置导入时的格式转换

------解决方案--------------------
DataTable中数据类型转换得到一个新的DataTable 貌似有点麻烦
------解决方案--------------------
前几天我也遇到过这种问题,思考后,觉得在excel里面做数据验证比较好,在datatable里面做也可以不过比较麻烦。