Access2007 OleDbConnection через сетевой ресурс сохраняется, хотя общий ресурс удаленH - PullRequest
2 голосов
/ 16 февраля 2011

Я столкнулся с довольно странным поведением ADO.NET / Access 2007.

Я запускаю свою программу на C # 2008 (целевой фреймворк .NET 2.0) на ПК1.ПК1 имеет сетевой ресурс на ПК2 (\ PC2 \ Temp сопоставлен как X :) На ПК2 в Temp есть файл базы данных доступа xy.mdb

Программа открывает OleDbConnection для X: \ xy.mdb.Работает нормально.

Затем, пока программа еще работает, я сбрасываю общий ресурс на ПК2.(Проводник Windows на ПК1 сообщает мне, что общий ресурс X: потерян). Я переименовал файл базы данных на ПК2, поэтому новое подключение не должно быть возможным.

Но программа все еще может запрашивать базу данных!(через OleDbCommand.ExecuteReader () или ExecuteNonQuery ())

Кто-нибудь объяснил мне?Вся база данных заблокирована?И можно ли это предотвратить, чтобы при исключении общего ресурса я получал OleDbException и пытался запросить недоступную базу данных?

Спасибо за любую помощь, Ральф

1 Ответ

0 голосов
/ 14 апреля 2011

Я пытался воспроизвести проблему с помощью следующего кода и примера базы данных доступа ... независимо от того, как я пытался (sahre или mapped drive), я всегда получал исключение:

Необработанное исключение: System.Data.OleDb.OleDbException: Ядро базы данных Microsoft Jet не может найти входную таблицу или запрос 'Somejunk. Убедитесь, что он существует и что его имя написано правильно.

, что ожидается. Вы должны пересмотреть свое окружение на 100%.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;

namespace AccessOverShare
{
    class Program
    {
        static void Main(string[] args)
        {
            int ct = 0;

            using(OleDbConnection oleDbConnection = new OleDbConnection())
            {
                //oleDbConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\127.0.0.1\\share\\test.mdb.";
                oleDbConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=w:\\test.mdb.";
                oleDbConnection.Open();

                using(OleDbCommand oleDbCommand = oleDbConnection.CreateCommand())
                {
                    oleDbCommand.CommandType = CommandType.Text;
                    oleDbCommand.CommandText = "select junkid, junktext from somejunk";

                    using (OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.Default))
                    {
                        ct = 0;         
                        while(oleDbDataReader.Read())
                        {
                            ct++;
                            Console.WriteLine("{0:0000}", oleDbDataReader["junkid"]);
                        }
                    }

                    Console.WriteLine();
                    Console.WriteLine(ct);
                }

                Console.WriteLine();
                Console.WriteLine();

                Console.Write("kill the share then press enter to continue");
                Console.ReadLine();

                using (OleDbCommand oleDbCommand = oleDbConnection.CreateCommand())
                {
                    oleDbCommand.CommandType = CommandType.Text;
                    oleDbCommand.CommandText = "select junkid, junktext from somejunk";

                    using (OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.Default))
                    {
                        ct = 0;
                        while (oleDbDataReader.Read())
                        {
                            ct++;
                            Console.WriteLine("{0:0000}", oleDbDataReader["junkid"]);
                        }
                    }

                    Console.WriteLine();
                    Console.WriteLine(ct);
                }
            }
        }
    }
}
...