使用
的连接字符串"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)at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection连接)
在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options,Object poolGroupProviderInfo, DbConnectionPool池,DbConnection 拥有对象) System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(的DbConnection owningConnection, DbConnectionPoolGroup poolGroup)at System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection 拥有连接) System.Data.ProviderBase.DbConnectionClosed.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory)at System.Data.OleDb.OleDbConnection.Open()
即使我将服务器URL从localhost更改为无效的hkfjhuidhf,我也会收到此错误,因此我认为这是服务器上有关OleDb连接/设置和/或MDAC的问题。
服务器是运行最新Service Pack的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;
}
}
这会在连接时出现。打开()
有没有人有任何想法?我从inf文件重新安装了MDAC,但是我已经阅读了一些关于.Net代码的MDAC 2.8 SP2的文章。
非常欢迎任何和所有的意见。
答案 0 :(得分:1)
听起来有一个或多个OLEDB组件丢失或损坏。
当我遇到类似的问题时,我发现重新安装MDAC不起作用 - 第一次安装确实阻止了后续重新安装修复丢失的引用/文件。
我最后通过使用RegMon找到失败的注册表调用,然后将调用失败的键与工作机器进行比较来修复它。这将为您提供指向缺少的DLL的指针。在我开始工作之前,我最终手动重新注册和编辑5或6个DLL的注册表项。
也许值得在serverfault上询问。
答案 1 :(得分:0)
如果要连接到SQL,则应使用SqlClient:
var conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = connectionString;
conn.Open();
如前所述,尝试使用“MyServer \ SQLExpress”替换您的数据源参数。可能发生错误,因为它无法找到SQL实例。