ฉันใช้วัตถุ SqlBulkCopy เพื่อเขียน DataTable ลงในตารางเซิร์ฟเวอร์ SQL อย่างไรก็ตาม ทุกครั้งที่ฉันตรวจสอบฐานข้อมูลของฉันอีกครั้ง ฐานข้อมูลจะยังคงไม่เสียหายโดยไม่มีการเปลี่ยนแปลง ก
ฉันได้ลองค้นหาโดย Google เพื่อระบุปัญหาของฉันแล้ว แต่ไม่สามารถแก้ไขได้
DataTable มาจากไฟล์ .xls
public static DataTable dt = new DataTable();
private void ExportToGrid(String path, String filen)
{
int idx = filen.IndexOf(".");
string tf = filen.Remove(idx, 4);
OleDbConnection MyConnection = null;
DataSet DtSet = null;
OleDbDataAdapter MyCommand = null;
MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties=Excel 8.0;");
ArrayList TblName = new ArrayList();
MyConnection.Open();
DataTable schemaTable = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow row in schemaTable.Rows)
{
TblName.Add(row["TABLE_NAME"]);
}
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + TblName[0].ToString() + "]", MyConnection);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
MyCommand.FillSchema(DtSet, SchemaType.Source);
DataTable dt = new DataTable();
dt = DtSet.Tables[0];
Session["dt"] = dt;
int x = dt.Rows.Count;
MyConnection.Close();
if (dt.Rows.Count > 0)
{
theGridView.DataSource = dt;
theGridView.DataBind();
}
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
}
นี่คือฟังก์ชั่นนักเขียนของฉัน
private void StartImport()
{
string servername = server;
string database = database;
string tbl = "dbo.LinkDb";
Stopwatch sw = new Stopwatch();
sw.Start();
SqlBulkCopy bulkCopy = new SqlBulkCopy("Data Source=" + servername + ";Initial Catalog=" + database + ";Integrated Security=SSPI", SqlBulkCopyOptions.TableLock);
bulkCopy.DestinationTableName = tbl;
bulkCopy.WriteToServer(dt);
sw.Stop();
lblResult.Visible = true;
lblResult.Text = (sw.ElapsedMilliseconds / 1000.00).ToString();
}
ด้านล่างนี้คือภาพหน้าจอของตารางที่จัดเก็บไว้ในเซิร์ฟเวอร์ sql ของฉัน ฉันรับรองกับคุณว่าฉันได้ปฏิบัติตามกฎที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ไม่มีข้อยกเว้นเกิดขึ้น และเวลาที่ผ่านไปโดยเฉลี่ยคือ 0.018 - 0.020 วินาที
ขอบคุณสำหรับความช่วยเหลือใด ๆ
ขอบคุณ
dt
มีกี่แถวในเวลาที่คุณเรียกWriteToServer
? คอลัมน์ตรงกันไหม? (อย่างหลังควรแสดงออกมาเป็นข้อยกเว้น แทนที่จะไม่ทำอะไรเลย) - person Marc Gravell   schedule 08.02.2012