Предотвратить пока, вставляя или импортируя, являясь дублирующимися записями, используя текстовые поля (asp.net) - PullRequest
0 голосов
/ 10 мая 2019

Я делаю программу, которая импортирует файл Excel в базу данных, и эта часть работает нормально. Но сейчас я работаю над тем, чтобы избежать / предотвратить вставку или импорт повторяющихся записей пользователем. Я пытался сделать составной ключ во всех столбцах, но это не сработало. Я получаю ожидание: "DBNull" ... Я думаю, что существует другой способ кодирования?

Вот мой код:

protected void Upload_Click(object sender, EventArgs e)
        {
            string excelPath = Server.MapPath("~/NewFolder/") + Path.GetFileName(FileUpload1.PostedFile.FileName);

            string filepath = Server.MapPath("~/NewFolder/") + Path.GetFileName(FileUpload1.FileName);
            string filename = Path.GetFileName(filepath);
            FileUpload1.SaveAs(excelPath);
            string ext = Path.GetExtension(filename);

            String strConnection = @"Data Source=Ricky-PC\SQLEXPRESS;Initial Catalog=ImportHere;Persist Security Info=True;User ID=sa;Password=******";
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1;\"";


            OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
            excelConnection.Open();
            DataTable schema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string sheetName = schema.Rows[0]["TABLE_NAME"].ToString();
            OleDbCommand cmd = new OleDbCommand("Select * from ["+sheetName+"]", excelConnection);
            OleDbDataReader dReader;
            dReader = cmd.ExecuteReader();

            using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
            {
                sqlBulk.DestinationTableName = "Data";
                sqlBulk.ColumnMappings.Add(0,0);
                sqlBulk.ColumnMappings.Add(1,1);
                sqlBulk.ColumnMappings.Add(2,2);
                sqlBulk.ColumnMappings.Add(3,3);

                sqlBulk.WriteToServer(dReader);
            }

            excelConnection.Close();
        }

1 Ответ

0 голосов
/ 25 мая 2019

Попробуйте выполнить загрузку в промежуточную таблицу, а затем выполните слияние с финальной таблицей, используя сохраненный процесс.Слияние позволит вам обновить существующие записи и вставить новые записи.Это не будет вставлять дубликаты.Если нет необходимости в обновлениях, тогда вставка из промежуточной таблицы в финальную будет работать, так как вы можете отфильтровать записи, которые соответствуют, и вставлять только записи, которые не соответствуют существующим записям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...