Вставить несколько строк из Excel в ORACLE с помощью MVC - PullRequest
1 голос
/ 07 мая 2019

Я хочу вставить данные из Excel в ORACLE, но это не работает.Кто может мне помочь? Спасибо всем!Вот мой код контроллера

DataTable dt = ds.Tables [0];

            OracleConnection oraclecon = (OracleConnection)db.Database.Connection;

            // create command and set properties  
            OracleCommand cmd = oraclecon.CreateCommand() as OracleCommand;

            oraclecon.Open();

            string[] MA_TB = new string[dt.Rows.Count];
            string[] GHICHU = new string[dt.Rows.Count];

            for (int j = 0; j < dt.Rows.Count; j++)
            {
               MA_TB[j] = Convert.ToString(dt.Rows[j]["MA_TB"]);
                GHICHU[j] = Convert.ToString(dt.Rows[j]["GHICHU"]);
            }

            OracleParameter mA_TB = new OracleParameter();
            mA_TB.OracleDbType = OracleDbType.Varchar2;
            mA_TB.Value = MA_TB;

            OracleParameter gHICHU = new OracleParameter();
            gHICHU.OracleDbType = OracleDbType.Varchar2;
            gHICHU.Value = GHICHU;

            cmd.CommandText = "INSERT INTO CSKH_IMPTEST_07052019 (ma_tb,ghichu) VALUES (:2, :3)";

            cmd.Parameters.Add(mA_TB);
            cmd.Parameters.Add(gHICHU);

            cmd.ExecuteNonQuery();
            oraclecon.Close();

Ответы [ 2 ]

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

У меня была похожая задача, которую я выполнял с Epplus и Entity Framework, просматривая таблицу Excel и создавая новые объекты и добавляя их в базу данных.В интернете много примеров.

Пример с Epplus:

public ActionResult Import(HttpPostedFileBase upload)
{
    var users = new List<User>();
    var excelPackage = new ExcelPackage(upload.InputStream);
    // Reading the first worksheet
    var worksheet = excelPackage.Workbook.Worksheets[1];
    // Number of rows and columns
    int totalRows = worksheet.Dimension.Rows;
    int totalCols = expectedHeaders.Count();

    for (int row = 1; row <= totalRows; row++)
    {
        // Filling variables or creating objects
        var Name = worksheet.Cells[row, 1].Text;
...
    }
...
}

Затем вы можете выполнить foreach черезваш список, где вы можете добавить элементы в базу данных.

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

Это потому, что вы присвоили весь строковый массив параметру базы данных:

        string[] MA_TB = new string[dt.Rows.Count];

        …

        mA_TB.Value = MA_TB;

        …

        cmd.Parameters.Add(mA_TB);

Вместо одного из строковых значений в массиве.Это означает, что вы вставите System.String[] как "строку", а не "Hello World" или что-то еще.Это происходит потому, что когда вы звоните Convert.ToString(someobject), все, что произойдет, вызывается someobject.ToString().В отсутствие какого-либо переопределяющего метода (и строковый массив не имеет переопределения) вызывается значение по умолчанию ToString(), и все, что он делает, возвращает имя типа объекта - в этом случае строковый массив

Выберите один из элементов массива в качестве значения параметра:

        mA_TB.Value = MA_TB[0];

Или, если вы хотите, чтобы все они, например, были разделены запятыми, объедините их в одну строку:

        mA_TB.Value = String.Join(",", MA_TB);

Редактировать:

Вставить все строки из dt в базу данных, давайте использовать эти вещи, как они должны использоваться (команда настройки и параметры, многократно изменять значения параметров и выполнять) ..

        DataTable dt = ds.Tables[0];
        OracleConnection oraclecon = (OracleConnection)db.Database.Connection;

        // create command and set properties  
        OracleCommand cmd = oraclecon.CreateCommand() as OracleCommand;
        cmd.CommandText = "INSERT INTO CSKH_IMPTEST_07052019 (ma_tb,ghichu) VALUES (:2, :3)";
        OracleParameter mA_TB = new OracleParameter();
        mA_TB.OracleDbType = OracleDbType.Varchar2;
        cmd.Parameters.Add(mA_TB);

        OracleParameter gHICHU = new OracleParameter();
        gHICHU.OracleDbType = OracleDbType.Varchar2;
        cmd.Parameters.Add(gHICHU);

        oraclecon.Open();

        foreach(DataRow ro in dt.Rows)
        {
            mA_TB.Value = ro["MA_TB"].ToString();
            gHICHU.Value = ro["GHICHU"].ToString();
            cmd.ExecuteNonQuery();
        }

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