Получение исключения Oledb при обновлении столбца в Excel - PullRequest
0 голосов
/ 16 марта 2012

Я получаю следующую ошибку «Не задано значение для одного или нескольких обязательных параметров». В строке ExceuteNonQuery () приведенного ниже кода.

        System.Data.OleDb.OleDbConnection finalConnection;
        System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
        string sql = null;
        finalConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ='c:\\temp\\test.xlsx'; Extended Properties ='Excel 12.0 Xml;HDR=NO';");
        finalConnection.Open();
        myCommand.Connection = finalConnection;
        foreach (VinObject v in VinList)
            {
            sql = "Update [Sheet1$] set O = ? where S = ?;";
            myCommand.Parameters.Add(new OleDbParameter("@amt", v.CostNewAmt));
            myCommand.Parameters.Add(new OleDbParameter("@vin", v.VIN));
            myCommand.CommandText = sql;
            myCommand.ExecuteNonQuery();
            }
        finalConnection.Close();

Я также пытался использовать отдельную команду каждый раз, та же ошибка.

    foreach (VinObject v in VinList)
            {
            using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source ='c:\\temp\\test.xlsx'; Extended Properties ='Excel 12.0 Xml;HDR=No';"))
                {
                con.Open();
                string query = @"UPDATE [Sheet1$] SET O = ? WHERE S = ?";
                OleDbCommand cmd = new OleDbCommand(query, con);
                cmd.Parameters.AddWithValue("@param1", v.CostNewAmt);
                cmd.Parameters.AddWithValue("@param2", v.VIN);
                cmd.ExecuteNonQuery();
                con.Close();
                }
            }

Я могу изменить это в виде вставки и вставить в новую электронную таблицу Excel, но я не могу заставить это обновление работать. Есть идеи, что я делаю не так? Спасибо за помощь.

1 Ответ

1 голос
/ 16 марта 2012

Вы получаете сообщение об ошибке, поскольку Excel не распознает псевдонимы букв столбца «O» и «S».Ему нужен фактический столбец «имя», который является значением ячейки в первой заполненной строке.Если в этой ячейке нет действительного значения или вы указали HDR=NO в строке подключения, столбцы будут иметь имя F1, F2 ... Fn.Если вы не уверены, что представляют собой предполагаемые имена столбцов, проверьте имена, используя OleDbConnection.GetSchema(String,String[]) или OleDbDataReader.GetName(Int32).

Поскольку вы указали HDR=NO в строке подключения, ваш правильный SQL, скорее всего, будет

"Update [Sheet1$] set F15 = ? where F19 = ?;"

.* Как запрашивать и отображать данные Excel с помощью ASP.NET, ADO.NET и Visual C # .NET

Как передавать данные в книгу Excel с помощью Visual C # 2005 или VisualC # .NET Как использовать ADO.NET для извлечения и изменения записей в книге Excel с Visual Basic .NET .(Еще много полезной информации, даже если вы используете C #)
...