我很沮丧,因为我无法解决这个问题......
好吧,我一直用C#制作桌面应用程序,我几乎完成了应用程序, 但我有一个大问题。
我的应用程序导入一个excel工作簿,其中包含一些在Gridview中显示的信息。 它工作正常,但我的应用程序更新或修改了gridview中显示的数据,只有一列称为Balance。
我想在excel工作簿中更新此列,就像SQL中的更新条件一样 我有这些信息导入我的应用程序。
如果我在我的应用程序中修改某行,例如订单“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
答案 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();
}
答案 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) { }
}