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 constr, DataSourceWrapper& datasrcWrapper) 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection 连接)
在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup) 在 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

听起来一个或多个 OLEDB 组件丢失或损坏。

当我遇到类似问题时,我发现重新安装 MDAC 不起作用 - 第一次安装确实阻止了后续重新安装修复丢失的引用/文件。

我最终通过使用RegMon查找失败的注册表调用来修复它,然后将调用失败的键与工作机器进行比较。这将为您提供一个指向丢失 DLL 的指针。在我开始工作之前,我最终手动重新注册和编辑了 5 或 6 个 DLL 的注册表项。

可能还值得询问服务器故障。

于 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 回答