代码如下:
// 获取Excep文件的完整路径
string source = txtFileContents.Value;
string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data     Source=" + source + ";Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection (mystring);
OleDbDataAdapter myDa =new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
DataSet myDs =new DataSet();
// 将 Excel 的[Sheet1]表内容填充到 DataSet 对象
myDa.Fill(myDs); if(myDs.Tables[0].Rows.Count > 0)
{
string strSql = "";
          string CnnString="Provider=SQLOLEDB;database=test;server=(local);uid=sa;pwd=sa";
OleDbConnection conn =new OleDbConnection(CnnString);
conn.Open ();
OleDbCommand myCmd =null;
                //循环取excel数据
for(int i=0; i<myDs.Tables[0].Rows.Count; i++)
{
                     strSql="insert into news(ID,dept,sum) values ('";
   strSql += myDs.Tables[0].Rows[i].ItemArray[0].ToString() + "', '";
   strSql += myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "', '";
   strSql += myDs.Tables[0].Rows[i].ItemArray[2].ToString() + "')";
try
{
myCmd=new OleDbCommand(strSql,conn);
myCmd.ExecuteNonQuery();
Label1.Text = "<script language=javascript>alert('数据导入成功.');</script>";
}
catch
{
Label1.Text = "<script language=javascript>alert('数据导入失败.');</script>";
}
}

conn.Close();
}
第一个问题!
请看我的excel的格式是这样的话:手机型号 所属区域 总量
----------------------------------
E360 安徽办事处 4626
E360 北京办事处 10184
V501 北京办事处 578
E380 北京办事处 1495
A768 北京办事处 4907
V171 北京办事处 3482
C359 北京办事处 1003
C650 北京办事处 7188
A388 北京办事处 102
V300 北京办事处 4011
E360 东莞办事处 2430
--------------------------------------
上传文件后,点击确定后:程序报错,如下:外部表不是预期的格式。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 外部表不是预期的格式。源错误: 
行 82:  DataSet myDs =new DataSet();
行 83:  // 将 Excel 的[Sheet1]表内容填充到 DataSet 对象
行 84:  myDa.Fill(myDs);
行 85: 
行 86:  if(myDs.Tables[0].Rows.Count > 0)
 堆栈跟踪: 
[OleDbException (0x80004005): 外部表不是预期的格式。]
   System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20
   System.Data.OleDb.OleDbConnection.InitializeProvider() +57
   System.Data.OleDb.OleDbConnection.Open() +203
   System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState) +44
   System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +304
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +77
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38
   DataGrid1.ExcelNOW.GetConnect() in c:\inetpub\wwwroot\datagrid1\excelnow.aspx.cs:84
   DataGrid1.ExcelNOW.Button1_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\datagrid1\excelnow.aspx.cs:122
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1277第二个问题!
请看我的excel的格式改成这样的话:322 中文 22
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 中文
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 中文  中文
-----------------------------
插入成功了,但是在数据库中有中文的地方动没有显示!!
如下:
        ID       dept      sum
--------------------------------      
2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
2 ---------------------------------
如果全是数字就没有问题,以上问题请大家指点!!!谢了???

解决方案 »

  1.   

    我试了,没有问题:
    string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(".//")+"book.xls;Extended Properties=Excel 8.0";
    OleDbConnection cnnxls = new OleDbConnection (mystring);
    OleDbDataAdapter myDa =new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
    DataSet myDs =new DataSet();
    // 将 Excel 的[Sheet1]表内容填充到 DataSet 对象
    myDa.Fill(myDs); DataGrid1.DataSource=myDs;
    DataGrid1.DataBind();      
    //循环取excel数据
        string strSql="";
    for(int i=0; i<myDs.Tables[0].Rows.Count; i++)
    {
      InsertNews(myDs.Tables[0].Rows[i][0].ToString(),myDs.Tables[0].Rows[i][1].ToString(),myDs.Tables[0].Rows[i][2].ToString());

    }private void InsertNews(string id,string dept,string sum)
    {
    Public.OpenDataBase();
    SqlCommand myCommand=new SqlCommand("hh_InsertNews", Public.conn);;
    myCommand.CommandType=CommandType.StoredProcedure; myCommand.Parameters.Add(new SqlParameter("@ID",SqlDbType.VarChar,50));
    myCommand.Parameters["@ID"].Value=id; myCommand.Parameters.Add(new SqlParameter("@dept",SqlDbType.VarChar,50));
    myCommand.Parameters["@dept"].Value=dept; myCommand.Parameters.Add(new SqlParameter("@sum",SqlDbType.VarChar,50));
    myCommand.Parameters["@sum"].Value=sum; myCommand.ExecuteNonQuery();
    Public.CloseDataBase();
    }
      

  2.   

    对了,我在test数据库里加了一个存储过程:
    CREATE PROCEDURE hh_InsertNews @id varchar(50),@dept varchar(50),@sum varchar(50)
    AS
    insert into news values(@id,@dept,@sum)
    GOInsertNews调的就是这个
      

  3.   

    // 将 Excel 的[Sheet1]表内容填充到 DataSet 对象
    myDa.Fill(myDs,"[Sheet1$]");
    将数据库中的中文字段设成 nvarchar
      

  4.   

    Snippet Compiler只是一个调试工具,自己调试一下,我调了,没问题!!
      

  5.   

    那个关于数字的问题,可以参考一下http://www.cnblogs.com/pathik/archive/2005/01/31/99882.html
      

  6.   

    Snippet Compiler
    哪里有啊!外部表不是预期的格式。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 外部表不是预期的格式。源错误: 
    行 82:  DataSet myDs =new DataSet();
    行 83:  // 将 Excel 的[Sheet1]表内容填充到 DataSet 对象
    行 84:  myDa.Fill(myDs,“[Sheet1]”);
    行 85: 
    行 86:  if(myDs.Tables[0].Rows.Count > 0)
     堆栈跟踪: 
    [OleDbException (0x80004005): 外部表不是预期的格式。]
      

  7.   

    liuqm(blue),关键是现在中文不显示啊,我不知道如何解决!
      

  8.   

    关于有些栏位没有数据,请将你的连接字符串改称这样既可。string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source + ";Extended Properties="""HDR=yes;IMEX=1;Excel 8.0""";注意:关键是这句:IMEX=1。
      

  9.   

    string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source + ";Extended Properties="""HDR=yes;IMEX=1;Excel 8.0""";