Мое приложение обрезает таблицу базы данных и заполняет ее строками из excel.
Используя файл excel (2000 строк), ниже код загрузки вставляет все строки в базу данных полностью на моем локальном компьютере (моя среда разработки), а также на сервере, поэтому я подумал, что я успешно выполнил задачу,
Но затем пользователь добавил 10 новых строк в мое excel и попытался загрузить строки 2010 года, но кроме недавно добавленных 10 строк была вставлена строка 2000. Поэтому, используя этот файл excel с строками 2010, если я загружу его из таблицы базы данных сервера, заполненной 2000 строки, и если я загружу его, используя мою рабочую среду, итоговая таблица будет содержать строки 2010 года.
Сервер и локальное приложение точно совпадают. Я тоже пробовал форматирование и т. Д.
Редактировать пример выполнения: файл MyRecords.xlsx находится на моем рабочем столе, теперь я подключаюсь к своему приложению, используя
http://myserver/myapplication
и загрузите MyRecords.xlsx, затем проверьте количество в базе данных, в нем написано 2361 запись, затем откройте визуальную студию и запустите мое приложение ( http://localhost:58029/
) и загрузите MyRecords.xlsx и снова проверьте базу данных, в которой указано 2362 записи.
Редактировать пример Выполнение 2: у моего excel есть 2160 строк. Если я его загружу, он вставляет 2160 строк из локального и на сервер. Если я удалю 1000 тысяч строк и выгружаю его, теперь он вставляет 1160 строк из локального и с сервера, как и ожидалось. Теперь, если я повторно добавлю 1000 строк и выгружаю excel, теперь, если бы я сделал этот процесс с использованием локальной среды, он отлично работает с 2160 строками, если на сервере установлено 1160 строк. Поэтому любая модификация на excel не рассматривается на сервере, так что вы уверены, что это причина? â € «
private void UploadData(string path, string dbTableName)
{
//Create connection string to Excel work book
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
//Create Connection to Excel work book
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
//Create OleDbCommand to fetch data from Excel
excelConnection.Open();
DataTable dbSchema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //Get First Sheet Name
OleDbCommand cmd = new OleDbCommand("Select * from [" + dbSchema.Rows[0]["TABLE_NAME"].ToString() + "]", excelConnection);
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString);
//Give your Destination table name
sqlBulk.DestinationTableName = dbTableName;
try
{
sqlBulk.WriteToServer(dReader);
if(dbTableName == "TempTP")
{
SDatabaseManagerData.DatabaseManagerData.UpdateTP();
}
lbl_Error.Visible = true;
lbl_Error.Text = "Database updated!";
}
catch (SqlException ex)
{
lbl_Error.Visible = true;
lbl_Error.Text = "Database updated edilemedi! Hata: " + ex.Message;
}
excelConnection.Close();
}
Это происходит из-за функциональности «typeguessrow» excel. Изменить реестр установить typeguessrow от 8 до 0.
Обработать
1.type regedit.exe в командной строке и выполните поиск typeguessrow (нажмите F3, чтобы открыть поиск).
2. Экспорт реестра в качестве резервной копии
Редактор реестра Windows версии 5.00
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 12.0 \ Access Connectivity Engine \ Двигатели \ Excel]
"DisabledExtensions" = "! XLS"
"ImportMixedTypes" = "Текст"
"FirstRowHasNames" = шестигранный: 01
"AppendBlankRows" = DWORD: 00000001
"TypeGuessRows" = DWORD: 00000008
"Win32" = "C: \ PROGRA ~ 1 \ COMMON ~ 1 \ MICROS ~ 1 \ OFFICE12 \ ACEEXCL.DLL"