c#应用程序保存文件,即使我已经完成了它的工作

BKl*_*BKl 2 .net c# connection ado.net dbf

我有一个ado.net代码列表:

OleDbConnection oconn = new OleDbConnection();
                //   oconn.ConnectionString ="Driver={Microsoft Visual FoxPro Driver};Provider=vfpoledb.1;SourceType=DBF;SourceDB=" + pelna_sciezka + ";Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
                oconn.ConnectionString = "Provider=vfpoledb.1;Data Source=" + pelna_sciezka + ";Collating Sequence=machine";
                oconn.Open();
                OleDbCommand ocmd = oconn.CreateCommand();
                string na = TBNazwaKonta.Text.Replace("\n","");
                na = na.Replace("\r","") ;
                string ks2 = ks.Replace("\n","");
                ks2 = ks2.Replace("\r", "");
                 OleDbCommand dbCmdNull = oconn.CreateCommand();
                dbCmdNull.CommandText = "SET NULL OFF";
                dbCmdNull.ExecuteNonQuery();                
                string zapytanie = @"insert into " + @pelna_sciezka + @" (rk, Na,Ks) values (0,'" + na + "','" + ks2 +"')";
                ocmd.CommandText = zapytanie;
                ocmd.ExecuteNonQuery();
                oconn.Close();
Run Code Online (Sandbox Code Playgroud)

它没有任何问题,运行良好.但我使用的dbf文件正由另一个程序使用.为什么我执行查询和关闭连接dbf文件仍由程序保存?如果有人想打开它,则错误消息是"文件访问被拒绝".只有关闭应用程序,另一个才能访问

Hei*_*nzi 5

您没有关闭OleDbCommands.与SqlCommands相反,这实际上是可选的,这确实对OleDb产生了影响.

我建议使用using关键字; 这可确保在块结束时自动释放所有资源.作为额外的奖励,它确保在发生异常时也释放资源,因此Close永远不会达到您的手动命令.

using (OleDbConnection oconn = new OleDbConnection()) {
    oconn.ConnectionString = "Provider=vfpoledb.1;Data Source=" + pelna_sciezka + ";Collating Sequence=machine"; 
    oconn.Open(); 

    using (OleDbCommand ocmd = oconn.CreateCommand()) {
        string na = TBNazwaKonta.Text.Replace("\n",""); 
        na = na.Replace("\r","") ; 
        string ks2 = ks.Replace("\n",""); 
        ks2 = ks2.Replace("\r", ""); 

        using (OleDbCommand dbCmdNull = oconn.CreateCommand()) {
            dbCmdNull.CommandText = "SET NULL OFF"; 
            dbCmdNull.ExecuteNonQuery();
        } // closes dbCmdNull

        string zapytanie = @"insert into " + @pelna_sciezka + @" (rk, Na,Ks) values (0,'" + na + "','" + ks2 +"')"; 
        ocmd.CommandText = zapytanie; 
        ocmd.ExecuteNonQuery(); 
    }  // closes ocmd
} // closes connection
Run Code Online (Sandbox Code Playgroud)