Массовое подключение ODBC. Копировать записи из Excel (xlsx) в Sybase Adaptive Server Enterprise? - PullRequest
0 голосов
/ 02 апреля 2019

Поскольку это Adaptive Server Enterprise, SqlConnection не работает, поэтому мне нужно перейти к чему-то другому, например, OdbcConnection или еще (если у вас есть рекомендации).

Таблица базы данных sybase (скажем, таблица Customer) содержит довольно много миллионов записей, и каждый раз, когда я запускаю программу, я собираюсь выдвинуть еще несколько тысяч записей из Excel к таблице Sybase Customer. Из-за количества, я должен идти с кодом массового копирования. Предполагая, что в таблице базы данных уже есть миллионы записей, а в файле Excel есть еще 10 000 записей, я не могу просматривать записи Excel одну за другой, поэтому скопируйте код, пожалуйста.

Еще одна вещь, которую я должен рассмотреть: таблица Sybase может уже содержать некоторые записи в файле Excel, поэтому я не могу использовать оператор SQL Insert Into, поскольку записи уже существуют в таблице Sybase Customer, Мне может понадобиться использовать оператор SQL Update. В файле Excel есть несколько возможных записей об ошибках (которые не будут приняты таблицей Sybase), мне также потребуется использовать оператор Try Catch, чтобы перехватить это исключение.

Как попробовать мой код для массового копирования записей из Excel (xlsx) в Sybase Adaptive Server Enterprise?

Спасибо.

Справочная информация: Очень плохо знаком с C #, не закончил код, не скомпилировал код.

private void importExcelStripMenuItem_Click(object sender, EventArgs e)
{

    var filePath = string.Empty;
    OpenFileDialog OpenFile = new OpenFileDialog();

    OpenFile.Filter = "Excel Files|*.xl*"; //Filter for excel file
    OpenFile.Title = "Select your file";
    OpenFile.FilterIndex = 2;  
    OpenFile.RestoreDirectory = true;

    if (OpenFile.ShowDialog() == DialogResult.OK)
    {
        //Get the path of specified file
        filePath = OpenFile.FileName;
    }



    Excel.Application xlApp = new Excel.Application();
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath);
    Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];  //Only one sheet in the workbook





    // SET A CONNECTION WITH THE EXCEL FILE.
    OdbcConnection myExcelConn = new OdbcConnection("Driver={Microsoft Excel Driver (*.xls)}; DBQ=" + filePath +"; DriverID=790");

    try
    {
        myExcelConn.Open();

        // GET DATA FROM EXCEL SHEET.
        //Select all fields from the excel file, but prefer not to use SELECT * FROM ...., due to there may be irrevalent data in other columns, I only copy first 6 columns, Sybase table Customer has only those 6 fields too.
        OdbcCommand ObjCmd = new OdbcCommand("SELECT SocialSecurityNumber, FirstName, LastName, Gender, DOB, PhoneNumber FROM [" + xlWorksheet.Name + "$]", myExcelConn);

        // READ THE DATA EXTRACTED FROM THE EXCEL FILE.
        OdbcDataReader objBulkReader = null;
        objBulkReader = ObjCmd.ExecuteReader();



        //Close Excel file
        xlWorkbook.Close(false);
        xlApp.Quit();


        // SET THE CONNECTION STRING.


        using (OdbcConnection con = new OdbcConnection("Sybase ASE Connection String"))
        {
            con.Open();

            // FINALLY, LOAD DATA INTO THE DATABASE TABLE.
            //I don't know how to write this portion of code.
        }

        MessageBox.Show("Successfully Loaded.");

    }


    catch (Exception ex)
    {

        MessageBox.Show(ex.Message);

    }

    finally
    {
            // CLEAR.
            //Clear other objects happened during bulk copy
            myExcelConn.Close();
            myExcelConn = null;
    }
}

Ожидание: Завершите код, который сможет импортировать (Bulk Copy) записи из Excel в таблицу Sybase.

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