Что может быть причиной ошибки «Не удалось найти устанавливаемый ISAM» в моем коде? - PullRequest
1 голос
/ 12 декабря 2011

Я не могу понять, почему я получаю ошибку здесь, говоря: Could not find installable ISAM.Я пытаюсь добавить данные в файл Access, в котором, похоже, возникла проблема.

Я не уверен, почему это не сработает, так как при удалении каждой записи я использую код, требовательный почти ко всем.

Есть ли здесь очевидные ошибки?

        // Creating a query for each type of data.
        string sqlPC = @"INSERT INTO PersonalData([Type], [UserName], [Password]) 
                         VALUES(@Type, @UserName, @Password)";
        string sqlWS = @"INSERT INTO PersonalData([Type], [URL], [UserName], [Password]) 
                         VALUES(@Type, @URL, @UserName, @Password)";
        string sqlSC = @"INSERT INTO PersonalData([Type], [SoftwareName], [SerialCode]) 
                         VALUES(@Type, @SoftwareName, @SerialCode)";

    HashPhrase hashPhrase = new HashPhrase();
    Security security = new Security();

    private void InsertData(string sql)
    {
        string hashShortPass = hashPhrase.ShortHash(pass);

        string connectionString = 
            @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};
              Persist Security Info=False; Jet OLEDB: Database Password={1};";

        using (OleDbConnection connection = new OleDbConnection())
        {
            connection.ConnectionString = 
                string.Format(connectionString, filePath, hashShortPass);

            using (OleDbCommand command = new OleDbCommand(sql, connection))
            {
                OleDbParameter prmType = new OleDbParameter
                    ("@Type", security.EncryptAES(cmbType.Text, pass, user));

                command.Parameters.Add(prmType);

                if (cmbType.SelectedIndex == 0)
                {
                    OleDbParameter prmUserName = new OleDbParameter
                        ("@UserName", security.EncryptAES
                            (txtUserName.Text.Trim(), pass, user));
                    OleDbParameter prmPassword = new OleDbParameter
                        ("@Password", security.EncryptAES
                            (txtPassword.Text, pass, user));

                    command.Parameters.Add(prmUserName);
                    command.Parameters.Add(prmPassword);
                }
                else if (cmbType.SelectedIndex == 1)
                {
                    OleDbParameter prmURL = new OleDbParameter
                        ("@URL", security.EncryptAES
                            (txtURL.Text.Trim(), pass, user));
                    OleDbParameter prmUserName = new OleDbParameter
                        ("@UserName", security.EncryptAES
                            (txtUserName.Text.Trim(), pass, user));
                    OleDbParameter prmPassword = new OleDbParameter
                        ("@Password", security.EncryptAES
                            (txtPassword.Text, pass, user));

                    command.Parameters.Add(prmURL);
                    command.Parameters.Add(prmUserName);
                    command.Parameters.Add(prmPassword);
                }
                else if (cmbType.SelectedIndex == 2)
                {
                    OleDbParameter prmSoftwareName = new OleDbParameter
                        ("@SoftwareName", security.EncryptAES
                            (txtSoftwareName.Text.Trim(), pass, user));
                    OleDbParameter prmSerialCode = new OleDbParameter
                        ("@SerialCode", security.EncryptAES
                            (txtSerialCode.Text.Trim(), pass, user));

                    command.Parameters.Add(prmSoftwareName);
                    command.Parameters.Add(prmSerialCode);
                }

                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message);
                }
            }
        }
    }

Ответы [ 4 ]

3 голосов
/ 28 октября 2013

В моем случае я исправил так:

Я изменяю:

string conexion = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\Fa.mdb;Database Password=xxx;";

на:

string conexion = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\temp\Fa.mdb;Persist Security Info=False; Jet OLEDB:Database Password='xxx';";
2 голосов
/ 13 декабря 2011

Я изменил:

string connectionString = 
            @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};
              Persist Security Info=False; Jet OLEDB: Database Password={1};";

На:

string connectionString = 
            @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};
              Persist Security Info=False; Jet OLEDB:Database Password={1};";

И это работает, у меня есть 1 ненужный пробел ...

0 голосов
/ 07 августа 2014

в моем случае я изменил

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\Export.accdb;Database Password=123"

как

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\Export.accdb;Jet OLEDB:Database Password=123"

, и это работает ...

0 голосов
/ 12 декабря 2011

Для вставляемой части у вас есть поле с именем Password, которое является ключевым словом в MS Access. Ваш оператор вставки должен включать [Пароль] вместо пароля.

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