1

我正在尝试空白/清除整个 Excel 选项卡。但似乎没有任何效果

我尝试了以下方法:

OleDbConnection connection = new OleDbConnection(connectionString);
OleDbCommand command = new OleDbCommand("Select * FROM [Sheet1$]", connection);
OleDbCommand count = new OleDbCommand("Select count(*) FROM [Sheet1$]", connection);

DataSet dataset = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand("Select * from [Sheet1$]", connection);
adapter.Fill(dataset);

for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
{
    DataRow dtRow = dataset.Tables[0].Rows[i];
    foreach (DataColumn col in dataset.Tables[0].Columns)
    {
        if(col.DataType == typeof(string))
        dataset.Tables[0].Rows[i][col] = "";
   }

}
dataset.Tables[0].AcceptChanges();
adapter.Update(dataset.Tables[0]);
4

2 回答 2

1

如果你的 Excel 文件有主键,你可以使用 OleDbCommandBuilder,如果没有,OleDbDataAdapter 或 OleDbCommand 会是更好的方法。适配器。你不能直接使用 Update(dataset.Tables[0]),这里是代码:

            OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", myConnection);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            string updateSQL = string.Format(@"UPDATE [Sheet1$] SET Status =? WHERE ID IN ( SELECT TOP 5 ID FROM [Sheet1$] WHERE Status <>? OR Status IS NULL )");
            adapter.UpdateCommand = new OleDbCommand(updateSQL, myConnection);
            adapter.UpdateCommand.Parameters.Add("@Status", OleDbType.Char, 255).SourceColumn = "Status";
            adapter.UpdateCommand.Parameters.Add("@OldStatus", OleDbType.Char, 255, "Status").SourceVersion = DataRowVersion.Original;
            dt.AsEnumerable().Take(5).ToList().ForEach(o => o.SetField("Status", @"Imported"));
            dt.AcceptChanges();
            adapter.Update(dt);
于 2013-12-10T06:48:10.763 回答
-1

我想操作 excel 文件,NPOI对你来说是一个更好的选择。

它是开源的且易于使用。

我以前使用 OLEDB 读取 excel 文件,但从未尝试使用它来更新数据。如果您必须使用它,请确保您的 excel 文件不是只读的。

于 2012-11-26T08:35:43.110 回答