Как вы делитесь файлом базы данных MS Access в C #? - PullRequest
1 голос
/ 12 февраля 2011

У меня есть файл MS Access для регистрации данных в моем проекте C #, но когда система открыта и другая удаленная рабочая станция хочет получить доступ к этому файлу MS Access, она уведомляет, что вы не можете получить доступ к этому файлу, потому что он уже используется?Может ли это быть запрограммировано в C #, чтобы этот файл MS Access можно было использовать на другой рабочей станции?Вот мой код.

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

using System.IO;
using System.Data.OleDb;

using System.Security.AccessControl;


using ADOX;

namespace TestDataLog
{
    public class TestDataLog
    {
        OleDbConnection dbConnection = null;

        OleDbConnectionStringBuilder oleDbConnectionStringBuilder = null;

        OleDbCommand command;

        public string FileName { get; set; }

        public string TableName { get; set; }


        public TestDataLog(string tableName, string path, string fileName = "TestDataLog.Mdb")
        {
            try
            {
                TableName = tableName;

                FileName = fileName;

                dbConnection = new OleDbConnection();

                oleDbConnectionStringBuilder =

                new OleDbConnectionStringBuilder();

                oleDbConnectionStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0";

                path = Path.Combine(path, FileName);

                oleDbConnectionStringBuilder.DataSource = path;

                oleDbConnectionStringBuilder.ConnectionString += ";Jet OLEDB:Engine Type=5";

                if (!File.Exists(path))
                {
                    Catalog catalog = new Catalog();

                   catalog.Create(oleDbConnectionStringBuilder.ConnectionString);
                }

                this.Open();

                this.CreateTable();
            }

            catch (Exception ex)
            {
                this.Close();

                throw ex;
            }                        
        }


        public void Log(string serial, bool testResult)
        {
            try
            {
                command = dbConnection.CreateCommand();

                command.CommandText = "INSERT INTO " + TableName +
                    " (DateTimeLog," +
                    " SN," +
                    " TestResult)" +
                    " VALUES(#" +
                    DateTime.Now + "#, '" +
                    serial + "', " +
                    testResult + ")";

                command.ExecuteNonQuery();

                this.Close();
            }

            catch (Exception ex)
            {
                this.Close();

                throw ex;               
            }
        }


        public void Open()
        {
            if (!(dbConnection.State == System.Data.ConnectionState.Open))
            {
                dbConnection.ConnectionString =
                    oleDbConnectionStringBuilder.ConnectionString;

                dbConnection.Open();
            }
        }



        public void Close()
        {
            if (dbConnection != null)
                if (!(dbConnection.State == System.Data.ConnectionState.Closed))
                {
                    dbConnection.Close();

                    dbConnection = null;
                }
        }


        public void CreateTable()
        {
            try
            {
                command = dbConnection.CreateCommand();

                command.CommandText =
                    "CREATE TABLE " + TableName + " (" +
                    "[Count] IDENTITY NOT NULL PRIMARY KEY, " +
                    "[DateTimeLog] TIMESTAMP NOT NULL, " +
                    "[SN] VARCHAR(50) NOT NULL, " +
                    "[TestResult] BIT NOT NULL)";

                command.ExecuteNonQuery();
            }

            catch (OleDbException ex)
            {
                if (!(ex.Message.StartsWith("Table") && ex.Message.EndsWith("already exists.")))
                {
                    this.Close();

                    throw ex;
                }
            }
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 12 февраля 2011

Добавьте Mode=Share Deny None в строку подключения. Это откроет файл вашей базы данных в режиме полного доступа. Теперь вам решать управлять параллелизмом. : -)

0 голосов
/ 12 февраля 2011

Конечно, да. ... Просто убедитесь, что ваша база данных находится в общей папке, которую другая рабочая станция также может просматривать через сеть. Затем используйте путь к файлу, где находится ваша БД, например:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\MySharedFolder\\TestDataLog.Mdb

MS ACESS Соединение

С уважением ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...