Проверьте содержимое файла Excel перед импортом - PullRequest
0 голосов
/ 08 декабря 2011

Я использую VS2005 C # ASP.NET и SQL Server 2005.

У меня есть функция, которая импортирует данные Excel.Я встречался с ситуацией, когда данные внутри неуместны, и это приводило к отключению БД SQL Server.

Например, ВЫБРАТЬ [Имя пользователя], [Пароль] из [userlist $] -> Если электронная таблица Excel содержит[Имя пользователя] в одном столбце или значения ниже столбцов, сервер будет аварийно завершить работу.

EG enter image description here

Могу ли я узнать, как можно получить инструкцию для проверки на наличие ошибки этого файла перед загрузкой?Предпочитаю if else заявления для проверки.

Спасибо за любую помощь или приведенные примеры.

Ниже приведен мой фрагмент кода для загрузки в Excel:

if (FileImport.HasFile)
    {

        // Get the name of the Excel spreadsheet to upload. 
        string strFileName = Server.HtmlEncode(FileImport.FileName);

        // Get the extension of the Excel spreadsheet. 
        string strExtension = Path.GetExtension(strFileName);

        // Validate the file extension. 
        if (strExtension == ".xls" || strExtension == ".xlsx")
        {
                // Generate the file name to save. 
                string strUploadFileName = "C:/Documents and Settings/user01/My Documents/Visual Studio 2005/WebSites/MajorProject/UploadFiles/" + DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension;

                // Save the Excel spreadsheet on server. 
                FileImport.SaveAs(strUploadFileName);

                // Create Connection to Excel Workbook
                string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUploadFileName + ";Extended Properties=Excel 8.0;";

                using (OleDbConnection connection =
                             new OleDbConnection(connStr))
                {
                    string selectStmt = string.Format("Select [COLUMNS]  FROM [userlist$]");

                    OleDbCommand command = new OleDbCommand(selectStmt, connection);

                    connection.Open();
                    Console.WriteLine("Connection Opened");
                    // Create DbDataReader to Data Worksheet
                    using (DbDataReader dr = command.ExecuteReader())
                    {
                        // SQL Server Connection String
                        string sqlConnectionString = "Data Source=<datasource>";

                        // Bulk Copy to SQL Server
                        using (SqlBulkCopy bulkCopy =
                                   new SqlBulkCopy(sqlConnectionString))
                        {
                            bulkCopy.DestinationTableName = "UserDB";
                            bulkCopy.WriteToServer(dr);
                            return;
                        }
                    }
                }

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Вы должны решить причину проблемы, которая является базой данных.Очевидно, способ хранения данных должен быть с помощью хранимых процедур, которые обрабатывают неверно введенные данные.

Кроме того, ограничения для таблиц базы данных должны запрещать хранение бессмысленных данных.

0 голосов
/ 08 декабря 2011

В зависимости от объема данных в электронной таблице Excel, вы можете прочитать каждое значение из интересующего вас столбца, например, в словарь и прервать импорт, как только обнаружите первый конфликт.

Например, используя существующий DataReader:

Dictionary<string, string> cValues = new Dictionary<string, string>();

// Create DbDataReader to Data Worksheet
using (DbDataReader dr = command.ExecuteReader())
{
   while (dr.Read()) {
      string sValue = dr[0].ToString();
      if (cValue.ContainsKey(sValue)) {
         // There is a duplicate value, so bail
         throw new Exception("Duplicate value " + sValue);
      } else {
         cValues.Add(sValue, sValue);
      }
   }
}

// Now execute the reader on the command again to perform the upload
using (DbDataReader dr = command.ExecuteReader())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...