gpt4 book ai didi

c# - 创建 excel 表和输入 SQL 一起运行时不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:19 24 4
gpt4 key购买 nike

所以我有一些代码可以从 Smartsheets 创建一个 excel 工作表,然后将 excel 工作表中的信息提取到 SQL 中。如果我分别运行每个部分,代码就可以工作,但如果我同时运行它,它将创建表,但不会输入数据。下面我将展示主程序中的各个部分。我认为没有必要显示其余代码,因为正如我所说,它是单独工作的。

//Make an Excel sheet from smartsheet
Smartsheet smartsheet = new Smartsheet();
long excelSmartsheetID = smartsheet.getSmartSheetID(currentWorkSheet);
smartsheet.createExcel(excelSmartsheetID);

//Extract Data From Excel into SQL
SSIS excelToSQL = new SSIS();
excelToSQL.storeSmartSheetDataToSQL();

所以我不确定这里发生了什么。我已经让线程在两个部分之间休眠了 10 秒,但它仍然不起作用。完全不知道可能是什么问题。我应该补充一点,我正在使用 SSIS 连接到 Excel 工作表并在 SQL 中创建它。如果您需要更多信息,请告诉我。

最佳答案

听起来 Excel 文件在尝试第二次访问时仍处于打开状态。当打开 Excel 文件进行写入时,它会被锁定,这可以防止另一个进程(在您的情况下是 SSIS)编辑该文件。这可以使用带有如下代码的 Smartsheet C# SDK 来确认,该代码在写入文件后从不关闭。

// Set the Access Token
Token token = new Token();
token.AccessToken = "YOUR_TOKEN";

// Use the Smartsheet Builder to create a Smartsheet
SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(token.AccessToken).Build();
BinaryWriter output = new BinaryWriter(new FileStream("c:\\file.xls", FileMode.Create));
smartsheet.Sheets().GetSheetAsExcel(8325033727682436L, output);
Console.WriteLine("Done writting");
System.Threading.Thread.Sleep(100000);

运行上面的代码,在打开并写入文件后,它会休眠很长时间。当代码处于休眠状态时,您可以尝试手动打开 Excel 文件,您将看到如下所示的对话框,显示我们仍然打开了 Excel 文件(通过我们的代码),即使我们已经完成了对它的写入。

enter image description here

此问题的解决方案是在我们完成写入后立即关闭 Excel 文件。这可以通过在流上使用 close() 方法或使用 using statement 来完成。 .我更喜欢 using 语句,下面是一个例子:

// Set the Access Token
Token token = new Token();
token.AccessToken = "YOUR_TOKEN";

// Use the Smartsheet Builder to create a Smartsheet
SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(token.AccessToken).Build();
using (BinaryWriter output = new BinaryWriter(new FileStream("c:\\file.xls", FileMode.Create)))
{
smartsheet.Sheets().GetSheetAsExcel(8325033727682436L, output);
}
Console.WriteLine("Done writting");
System.Threading.Thread.Sleep(100000);

现在,如果我们运行上面的代码,它会在最后休眠,但这次 Excel 文件不会被锁定,因为 using 语句会在我们完成写入后立即关闭文件。

关于c# - 创建 excel 表和输入 SQL 一起运行时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27515348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com