如何从C#

时间:2017-07-28 13:14:02

标签: c# sql excel

我很沮丧,因为我无法解决这个问题......

好吧,我一直用C#制作桌面应用程序,我几乎完成了应用程序, 但我有一个大问题。

我的应用程序导入一个excel工作簿,其中包含一些在Gridview中显示的信息。 它工作正常,但我的应用程序更新或修改了gridview中显示的数据,只有一列称为Balance。

我想在excel工作簿中更新此列,就像SQL中的更新条件一样 我有这些信息导入我的应用程序。

Excel Workbook

如果我在我的应用程序中修改某行,例如订单“12345”的行,我想在我的Excel工作簿中更新名为“该行的余额”的列。

我一直在尝试使用此代码:

    string order = textBox1.Text;
    string balance = textBox2.Text;

    filePath = openFileDialog1.FileName;
    extension = Path.GetExtension(filePath);
    header = "Yes";
    OleDbConnection MyConnection = new OleDbConnection(conStr); ;
    OleDbCommand myCommand = new OleDbCommand();
    string sql = null;
    MyConnection.Open();
    myCommand.Connection = MyConnection;
    sql = "UPDATE [" + sheetName + "] SET [" + sheetName + "].[Order]=123 WHERE [" + sheetName + "].[Balance]=12313";
    myCommand.CommandText = sql;
    myCommand.ExecuteNonQuery();
    MyConnection.Close();

如果我调试代码,它就是执行的句子,我认为它没问题,但它不起作用。

UPDATE ['12234$'] SET ['12234$'].[Order]=123 WHERE ['12234$'].[Balance]=12313

它给了我这个错误:

Message=No value given for one or more required parameters.
  Source=Microsoft Access Database Engine

3 个答案:

答案 0 :(得分:3)

考虑使用NuGet包来代替Excel。 EPPlus是一个很棒的人。

using (var package = new ExcelPackage(@"someFile.xlsx")
{
   var sheet = package.Workbook.Worksheets.First();
   sheet.Cells["E2"].Value = 12345.32M;
   package.Save();
}

不再可能使用Sql,但您可以使用Linq:

using (var package = new ExcelPackage(@"someFile.xlsx")
{
   var sheet = package.Workbook.Worksheets.First();
   int rowIndex = sheet.Cells["C2:C5"].First(x => int.Parse(x.Value.ToString()) == 12345).Start.Row;
   const int balanceColumnIndex = 5;
   sheet.Cells[rowIndex, balanceColumnIndex].Value = 12313M;
   package.Save();
}

我写了a series about EPPlus on my blog

答案 1 :(得分:1)

这只是一个想法 - 但是你的SQL类字符串是否设置正确?

如果您尝试更新特定订单的余额,则需要将其存储在SET命令中。

所以,有些事情......

UPDATE ['12234$'] SET ['12234$'].[Balance]=12313 WHERE ['12234$'].[Order]=12345

答案 2 :(得分:0)

//尝试此解决方案

        string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Directory.GetCurrentDirectory() + "/swtlist.xlsx;" +
                     @"Extended Properties='Excel 12.0;HDR=Yes;';Persist Security Info=False;";


        using (OleDbConnection connection = new OleDbConnection(connString))
        {
            connection.Open();
            try
            {
                DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                OleDbCommand cmd = new OleDbCommand("UPDATE  [Feuil1$]  SET d='yes' ", connection);

                  cmd.ExecuteNonQuery();
                connection.Close();


            }
            catch (Exception ex) { }
        }