我有一个SQL脚本文件,其中有一个我想在运行时操作的特定行。我想出了以下内容,它工作正常。但是,我在尝试再次运行时遇到异常,说该文件正由另一个进程使用。似乎文件没有被关闭,但我无法弄清楚在哪里以及为什么。
我有一个按钮,可执行以下操作:
OpenFileDialog dialog = new OpenFileDialog() { FileName = "Document", DefaultExt = ".csv", Filter = "Comma Seperated File (.csv)|*.csv" };
Nullable<bool> result = dialog.ShowDialog();
string filename = "";
if (result == true)
{
filename = dialog.FileName;
}
updateSQLScript(filename);
FileInfo file = new FileInfo("\\Tools_TextileMagazine\\CSharp_Template\\Tools_TextileMagazine\\AdditionalFiles\\SQLQuery1.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(clsConstants.LOCALDB_CONN_STRING);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
方法updateSQLScript(filename)仅执行以下操作:
string[] arrLine = File.ReadAllLines(clsConstants.PATH_TO_SQL_SCRIPT);
arrLine[9] = String.Format("FROM '{0}'", filename);
//THIS IS WHERE THE EXCEPTION IS THROWN THE SECOND TIME I CLICK THE BUTTON
File.WriteAllLines(clsConstants.PATH_TO_SQL_SCRIPT, arrLine);
所以看来按钮事件中发生的其他进程正在干扰我的updateSQLScript方法。在运行该方法之前,我无法弄清楚如何正确关闭文件。据我所知,我需要使用using语句,但我不确定如何在这种情况下实现它。
非常感谢任何帮助。
答案 0 :(得分:2)
我还没有尝试过运行您的代码,但我认为这就是问题:&/ p>
string script = file.OpenText().ReadToEnd();
OpenText()方法返回需要关闭的StreamReader。尝试类似:
string script;
using (StreamReader reader = file.OpenText())
{
script = reader.ReadToEnd();
}