3

我在使用 C# 从 excel(它包含超过 30,000 行)读取数据时遇到问题。当我在本地系统中测试时,它工作正常,即它从 excel 复制所有行,但是当我在生产服务器中部署和运行时,它只读取大约 12,000 行)。

我也尝试过使用 BulkCopy,但也是如此。它与网络服务器有什么关系(我的网络服务器是 windows server 2008)?

请帮助我。谢谢

protected void ImportFromExcelToTempCompetitionTable(string filename)  
{
    string strConn = "Provider=Microsoft.ACE.OLEDB.12.0; " + "Data Source=" + filename + ";" + "Extended Properties=Excel 12.0";

    OleDbDataAdapter cmdOle;

 cmdOle = new OleDbDataAdapter("SELECT [StringColA], [StringColB], [NumberCol1], [NumberCol2] from  [XYZSheet]", strConn);


    try
    {
     Boolean blnSuccess = false;
        DataSet ds = null;
        ds = new DataSet();
        cmdOle.Fill(ds);
    if (ds.Tables[0].Rows.Count > 0)
        {
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            //*****************
            using (cnn = new SqlConnection(util.GetConnectionString()))
            {

                string sqlQuery = "INSERT INTO tbl_XYZ(StringColA, StringColB, NumberCol1,NumberCol2) values (@StringColA, @StringColB, @NumberCol1, @NumberCol2)";
                cmd = new SqlCommand(sqlQuery, cnn);
                cmd.CommandType = CommandType.Text;
                SqlParameter StringColA= new SqlParameter("@StringColA", SqlDbType.VarChar, 500);
                StringColA.Value = dr["StringColA"].ToString();
                cmd.Parameters.Add(StringColA);
                SqlParameter StringColB= new SqlParameter("@StringColB", SqlDbType.VarChar, 500);
                StringColB.Value = dr["StringColB"].ToString();
                cmd.Parameters.Add(StringColB);
                SqlParameter NumberCol1= new SqlParameter("@NumberCol1", SqlDbType.Decimal, 25);
                NumberCol1.Value = dr["NumberCol1"].ToString();
                cmd.Parameters.Add(NumberCol1);
                SqlParameter NumberCol2= new SqlParameter("@NumberCol2", SqlDbType.Decimal, 25);
                NumberCol2.Value = dr["NumberCol2"].ToString();
                cmd.Parameters.Add(NumberCol2);

                try
                {
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                    blnSuccess = true;
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    if (blnSuccess)
                    {
                        cmd.Dispose();
                        cnn.Close();
                    }
                }

            }
            //*****************
        }
    }        

    }
    catch (Exception ex)
    {

    }
    finally
    {

    }

}
4

0 回答 0