OleDbConnection.Open () выдает ошибку «Нет доступных сообщений об ошибках» перед тем, как связаться с SQL Server. - PullRequest
1 голос
/ 21 августа 2009

Использование строки подключения

"Provider=SQLOLEDB;Data Source=localhost;User ID=foo;password=bar;Database=CodeLists;Pooling=true;Min Pool Size=20;Max Pool Size=30;"

Я получаю следующую трассировку стека

System.Data.OleDb.OleDbException: нет сообщение об ошибке доступно, код результата: -2147024770 (0x8007007e). в System.Data.OleDb.OleDbServicesWrapper.GetDataSource (OleDbConnectionString constr, DataSourceWrapper & datasrcWrapper) в System.Data.OleDb.OleDbConnectionInternal..ctor (OleDbConnectionString constr, соединение OleDbConnection)
в System.Data.OleDb.OleDbConnectionFactory.CreateConnection (DbConnectionOptions параметры, объект poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) в System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection (DbConnection owningConnection, DbConnectionPoolGroup poolGroup) в System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) в System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection externalConnection, DbConnectionFactory connectionFactory) в System.Data.OleDb.OleDbConnection.Open ()

Я получаю эту ошибку, даже если я изменяю URL-адрес сервера с localhost на hkfjhuidhf, что является недопустимым, поэтому я предполагаю, что это проблема на сервере в отношении подключения / настройки OleDb и / или MDAC.

Сервер Windows Server 2003, на котором установлен последний пакет обновления, а MDAC - 2.8 SP2.

Код, который я использую:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void run_Click(object sender, EventArgs e)
    {
        output.Text = string.Empty;
        try
        {
            OleDbConnection connection;
            try
            {
                connection = new OleDbConnection(conString.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error creating connection");
                put(ex.ToString());
                return;
            }

            OleDbCommand command;
            try
            {
                command = connection.CreateCommand();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error creating command");
                put(ex.ToString());
                return;
            }

            command.CommandType = CommandType.Text;
            command.CommandText = "select top 10 * from " + table.Text;

            if (connection.State != ConnectionState.Open)
                connection.Open();

            OleDbDataReader reader;

            try
            {
                reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    string @out = string.Empty;
                    while (reader.Read())
                    {
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            @out += reader[i] + ", ";
                        }
                    }
                    put(@out);
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                put(ex.ToString());
            }
            finally
            {
                connection.Close();
            }
        }
        catch (Exception ex)
        {
            put(ex.ToString());
        }

    }

    private void put(string message)
    {
        output.Text += message+Environment.NewLine;
    }
}

И это падает при соединении. Open ()

У кого-нибудь есть идеи? Я переустановил MDAC из файла inf, однако я прочитал несколько статей, посвященных версии 2 MDAC 2.8, в отношении кода .Net.

Любой ввод крайне важен.

Ответы [ 2 ]

1 голос
/ 21 августа 2009

Звучит так, как будто один или несколько компонентов OLEDB отсутствуют или повреждены.

Когда у меня возникла похожая проблема, я обнаружил, что переустановка MDAC не работает - то, что при первой установке не позволило последующим переустановкам исправить недостающие ссылки / файлы.

В итоге я исправил ошибку, используя RegMon , чтобы найти сбойные вызовы реестра, а затем сравнил ключи, по которым вызовы не работали, с работающей машиной. Это даст вам указатель на отсутствующую DLL. В итоге я вручную перерегистрировал и отредактировал записи реестра для 5 или 6 DLL, прежде чем начал работать.

Возможно, стоит спросить об ошибке на сервере.

0 голосов
/ 21 августа 2009

Если вы подключаетесь к SQL, вы должны использовать SqlClient:

var conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = connectionString;
conn.Open();

Как уже предлагалось, попробуйте заменить параметр источника данных на «MyServer \ SQLExpress». Ошибка может возникнуть из-за невозможности найти экземпляр SQL.

...