1

の接続文字列を使用する

"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 コンストラクター、DataSourceWrapper& datasrcWrapper) で System.Data.OleDb.OleDbConnectionInternal..ctor (OleDbConnectionString コンストラクター、OleDbConnection 接続) で
System.Data.OleDb.OleDbConnectionFactory.CreateConnection (DbConnectionOptions オプション、オブジェクト poolGroupProviderInfo、DbConnectionPool プール、DbConnection owningObject) で System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection (DbConnection owningConnection、DbConnectionPoolGroup プール グループ) で System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection、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;
    }
}

そして、これは connection.Open() でフォールオーバーします

誰にもアイデアはありますか?inf ファイルから MDAC を再インストールしましたが、.Net コードに関して MDAC 2.8 の SP2 に関する記事をいくつか読みました。

すべての入力は大歓迎です。

4

2 に答える 2

1

1 つ以上の OLEDB コンポーネントが欠落しているか壊れているようです。

同様の問題が発生したとき、MDAC の再インストールが機能しないことがわかりました。最初のインストールで、その後の再インストールで欠落している参照/ファイルが修正されなかったことが原因でした。

RegMonを使用して失敗したレジストリ呼び出しを見つけ、呼び出しが失敗したキーを動作中のマシンと比較することで、最終的に修正しました。これにより、欠落している DLL へのポインタが得られます。動作するようになる前に、5 つまたは 6 つの DLL のレジストリ エントリを手動で再登録および編集することになりました。

serverfault についても質問する価値があるかもしれません。

于 2009-08-21T11:33:55.773 に答える
0

SQL に接続している場合は、SqlClient を使用する必要があります。

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

すでに提案されているように、データ ソース パラメータを「MyServer\SQLExpress」に置き換えてみてください。SQL インスタンスが見つからないため、エラーが発生している可能性があります。

于 2009-08-21T10:48:10.563 に答える