আমার ফাইলটি মুছে ফেলার চেষ্টা করার আগে আমার ডাটাবেস বন্ধ করতে সমস্যা হচ্ছে। কোডটি ঠিক
myconnection.Close();
File.Delete(filename);
এবং মুছুন এমন একটি ব্যতিক্রম ছুঁড়ে ফেলেছে যে ফাইলটি এখনও ব্যবহৃত হচ্ছে। আমি কয়েক মিনিটের পরে ডিবাগারে মুছে ফেলা () পুনরায় চেষ্টা করেছি, সুতরাং এটি কোনও সময়সীমা নয়।
আমার লেনদেনের কোড রয়েছে তবে এটি ক্লোজ () কল করার আগে মোটেও চলবে না। সুতরাং আমি মোটামুটি নিশ্চিত যে এটি কোনও উন্মুক্ত লেনদেন নয়। খোলা এবং নিকটবর্তী মধ্যে বর্গক্ষেত্র কমান্ড কেবল নির্বাচন করা হয়।
প্রোকমন আমার প্রোগ্রাম এবং আমার অ্যান্টিভাইরাসটি ডেটাবেস ফাইলটিতে দেখায়। এটি আমার প্রোগ্রামটি বন্ধ () এর পরে ডিবি ফাইল প্রকাশ করছে না।
ভিজ্যুয়াল স্টুডিও 2010, সি #, সিস্টেম.ডাটা.এসকিউএল সংস্করণ 1.0.77.0, Win7
আমি ঠিক দু'বছরের পুরানো বাগটি দেখেছি তবে চেঞ্জলগটি বলেছে এটি ঠিক আছে।
আমি কি অন্য কিছু পরীক্ষা করতে পারি? কোনও উন্মুক্ত আদেশ বা লেনদেনের তালিকা পাওয়ার কোনও উপায় আছে কি?
নতুন, কার্যকারী কোড:
db.Close();
GC.Collect(); // yes, really release the db
bool worked = false;
int tries = 1;
while ((tries < 4) && (!worked))
{
try
{
Thread.Sleep(tries * 100);
File.Delete(filename);
worked = true;
}
catch (IOException e) // delete only throws this on locking
{
tries++;
}
}
if (!worked)
throw new IOException("Unable to close file" + filename);