Мне нужно обновить несколько записей в таблице SQL Server из C #.Ниже приведены шаги, которым я должен следовать, и ниже приведен код.Код работает, но процесс занимает гораздо больше времени, чем ожидалось.Мне нужен быстрый способ обновить 10000 записей, я не уверен, что Bulk Copy будет работать для обновления.
Я видел другие ответы, в которых есть Bulk insert to temp, а затем update .. Но это обновление имеет один оператор, и здесь мне нужно обновить записи в БД на основе данных Excel, и для этого мне нужноЗацикливание каждой записи Excel. Так как я могу добиться более быстрого обновления.
1) Считайте данные Excel и скопируйте данные в таблицу данных
string strDirectory = string. Empty;
strDirectory = System.IO.Directory.GetCurrentDirectory() + "\\" + "Filename.xlsx";
string Connection String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + strDirectory + "; Extended Properties = \"Excel 12.0;HDR=YES;IMEX=1\"";
using (OleDbConnection conn = new OleDbConnection(Connection String))
{
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTableOleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
DataRow schemaRow = schemaTable. Rows[0];
string sheet = schemaRow["TABLE_NAME"].ToString();
string query = "SELECT * FROM [" + sheet + "]";
OleDbDataAdapter daexcel = new OleDbDataAdapter(query, conn);
daexcel.Fill(dt);
conn.Close();
}
2) Выполните некоторые манипуляции с данными, имеющими данныедо обновления в таблицу.
string strsqlst = string. Empty;
using (SqlConnection sqlConn = new SqlConnection(Connectionstring))
{
sqlConn.Open();
SqlCommand cmd;
StringBuilder sb = new StringBuilder();
sb.AppendLine("DataTable content:");
foreach (DataRow row in dt.Rows)
{
if (row.ItemArray[0].ToString() == "")
break;
strsqlst = "Update table Set col1= " + row.ItemArray[4].ToString() + " ,col2= " + row.ItemArray[5].ToString() + " where <Condition>'";
cmd = new SqlCommand(strsqlst, sqlConn);
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
sqlConn.Close();
}