[英]Only little record can I insert in to SQL Server database
我嘗試使用帶有C#的ASP.NET將200,000條記錄從Excel導入SQL Server 2005。 但是,當我嘗試瀏覽和導入文件時,僅插入了很少的記錄(僅100條記錄)。 我沒有任何解決辦法。
這是我的示例代碼
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
using System.Data.Common;
using System.Data.SqlClient;
public partial class UploadExcel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
///***when the button press, this code will execute***
protected void Upload_Click(object sender, EventArgs e)
{
int count = 0;
try
{
string path = string.Concat(Server.MapPath("~/TempFiles/"), UploadExcel1.FileName);
//Save File as Temp then you can delete it if you want
UploadExcel1.SaveAs(path);
DataTable dtExcel = new DataTable();
string SourceConstr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0",path);
OleDbConnection con1 = new OleDbConnection(SourceConstr);
string query = "Select * from [Sheet1$]";
OleDbDataAdapter dataadapt = new OleDbDataAdapter(query,con1);
dataadapt.Fill(dtExcel);
///connection string with in the database below
string sqlconn = System.Configuration.ConfigurationManager.ConnectionStrings["zena"].ToString();
//all the excel file is stored in the data table here
for (int i = 0; i < dtExcel.Rows.Count; i++)
{
try
{
SqlConnection sconn = new SqlConnection(sqlconn);
sconn.Open();
string insert_query12 = "insert into FCROperation (CallingNumber,OperatorId,OperatorName,CallReason) values("+dtExcel.Rows[i][0]+","+dtExcel.Rows[i][1]+",'"+dtExcel.Rows[i][2]+"','"+dtExcel.Rows[i][3]+"')";
SqlCommand cmd = new SqlCommand(insert_query12,sconn);
count+=cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//continue;
}
//Label1.Text = ex.Message;
}
if (count == dtExcel.Rows.Count)
{
Label1.Text = "Success" + dtExcel.Rows.Count + count;
}
else
{
Label1.Text = "Failed" + dtExcel.Rows.Count + count;
//Label1 = dtExcel.Rows.Count;
}
}
catch (Exception ex)
{
Label1.Text = ex.Message;
//throw ex;
}
finally
{
}
}
}
我想建議您僅一次打開連接,而不是每次插入一行時打開連接
using (SqlConnection sconn = new SqlConnection(sqlconn))
{
sconn.Open();
for (int i = 0; i < dtExcel.Rows.Count; i++)
{
try
{
string insert_query12 = "insert into FCROperation (CallingNumber,OperatorId,OperatorName,CallReason) values("+dtExcel.Rows[i][0]+","+dtExcel.Rows[i][1]+",'"+dtExcel.Rows[i][2]+"','"+dtExcel.Rows[i][3]+"')";
SqlCommand cmd = new SqlCommand(insert_query12,sconn);
count+=cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
for (int i = 0; i < ex.Errors.Count; i++)
{
errorMessages.Append("Index #" + i + "\n" +
"Message: " + ex.Errors[i].Message + "\n" +
"LineNumber: " + ex.Errors[i].LineNumber + "\n" +
"Source: " + ex.Errors[i].Source + "\n" +
"Procedure: " + ex.Errors[i].Procedure + "\n");
}
Console.WriteLine(errorMessages.ToString());
}
catch (Exception ex)
{
//continue;
}
//Label1.Text = ex.Message;
}
}
將此代碼替換為for循環代碼,以跟蹤引起異常的所有行。 並在循環后添加斷點以檢查errors
Dictonary<int, Exception> errors = new Dictonary<int, Exception>();
for (int i = 0; i < dtExcel.Rows.Count; i++)
{
try
{
SqlConnection sconn = new SqlConnection(sqlconn);
sconn.Open();
string insert_query12 = "insert into FCROperation (CallingNumber,OperatorId,OperatorName,CallReason) values("+dtExcel.Rows[i][0]+","+dtExcel.Rows[i][1]+",'"+dtExcel.Rows[i][2]+"','"+dtExcel.Rows[i][3]+"')";
SqlCommand cmd = new SqlCommand(insert_query12,sconn);
count+=cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
errors.Add(i, ex);
//continue;
}
//Label1.Text = ex.Message;
}
看來Excel OLE DB驅動程序只能找到電子表格的前100行。 這可能是由於多種原因造成的。 例如,以下一位用戶發現Excel打印區域影響了驅動程序 。 建議您以最小的格式將Excel數據剪切並粘貼到新的電子表格中,看看情況是否有所改善。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.