我在使用 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
{
}
}