2013-03-04 4 views
0

У меня есть страница ASP.NET, которая должна подталкивать некоторые данные к старой программе, которая использует базу данных Access 2003 для бэкэнд. Я мои строки соединения все готовы, чтобы сделать это (аукционное к локальной копии БД), но когда я пытаюсь читать из базы данных о его местонахождении акций сети, я получаю следующее сообщение об ошибке:Доступ DB в сетевой папке не может быть прочитан ASP.NET

Record(s) cannot be read; no read permission on 'tblDevice'.

Там нет паролей или какой-либо безопасности в базе данных, поэтому я уверен, что это связано с сетью. Я не знаю, как включить сетевой логин/пароль с помощью connection string. Я предполагаю, что потребуется добавить в папку определенного пользователя. Однако я не уверен, что пользователю требуется разрешение на эту папку для работы (как из Visual Studio, так и из IIS). У кого-нибудь был опыт с этим типом ошибки или знаете, какие «пользователи» должны получить разрешение на эту папку?


Мой код для справки:

Строка соединения Доступ

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\srv.local\SHAREDOCS\data.mdb; 
    User Id=admin;Password=; 

Код Выбор

public static DataTable GetDevices(string serialNum) 
{ 
    var conn = new OleDbConnection(); 
    var builder = new OleDbConnectionStringBuilder(); 
    builder.ConnectionString = ConfigurationManager.ConnectionStrings["development"].ToString(); 
    conn = builder.ConnectionString; 

    var sqlString = "SELECT DeviceID, SN FROM tblDevice WHERE Active=True AND [email protected] ORDER BY SN, DeviceID; " 

    using (var cmd = new OleDbCommand(sqlString, conn)) 
    { 
     cmd.Parameters.AddWithValue("@serialNum", serialNum); 
     var ds = new DataSet(); 
     var da = new OleDbDataAdapter(cmd); 

     da.Fill(ds); 

     return ds.Tables[0]; 
    } 
} 
+0

Взгляните на http://stackoverflow.com/questions/1937703/record-cannot-be-read-no-read-permission-on-msysobjects. А именно strDdl = "GRANT SELECT ON MSysObjects TO Admin;" CurrentProject.Connection.Execute strDdl – RandomUs1r

+0

@ Syn123 Это дает мне ошибку, даже когда я пытаюсь сделать это в локальной копии: «У вас нет необходимых разрешений для использования объекта». Попросите вашего системного администратора или человека, создавшего этот объект, установить для вас соответствующие разрешения. Идеи, как обойти это? Может быть, потому что мой MDB, и этот вопрос был ACCDB? – techturtle

ответ

1

Наконец-то выяснилось, и это было не там, где я ожидал. По какой-то нечетной причине база данных имела случайные различия в разрешении на различные таблицы. (У некоторых был полный доступ, некоторые нет, некоторые смешанные ... нет рифмы или причины из того, что я знаю о том, как работает программа.) Чтобы получить разрешения, я должен был пойти здесь (Access 2010, но файл MDB 2003 года):

File -> Info -> Users and Permissions -> User and Group Permissions...

что подарил мне со следующими параметрами:

enter image description here

Все, что я должен был сделать проверить соответствующие разрешения для каждого объекта, и теперь он работает.

0

Проверьте, что учетная запись службы, что ваше приложение р ool работает под правами доступа к базе данных. Если ваша учетная запись службы запущена, не имеет разрешения, то скорее всего вы столкнетесь с такой проблемой.

+0

Сейчас я все еще пытаюсь получить к нему доступ из отладки Visual Studio. Я не думаю, что у него есть связанная с ним учетная запись службы. Знаете ли вы, что он работает? – techturtle

+0

Какая версия .net Framework? Я предполагаю, что он работает под учетной записью локальной службы. что-то вроде имени_компьютера \ ASPNET. – TimWagaman

+0

Рамочная версия = .net 4.0. Как я могу определить, какие учетные записи службы работают на моей машине? – techturtle

Смежные вопросы