为什么OleDbConnection / C#的InvalidOperationException?

时间:2014-12-26 13:32:55

标签: c# sql-server oledbconnection

为什么OleDbConnection / C#的InvalidOperationException?

string connectionString =
  "Provider=SQLOLEDB.1;" +
  "Integrated Security=SSPI;" +
  "Persist Security Info=False;" +
  "Trusted_Connection=False;" +
  "Data Source=XXX-LAPTOP\\SQLEXPRESS;" +
  "Initial Catalog=C:\\...\\SqlServerDbExample.mdf";

  OleDbConnection oleConnection = new OleDbConnection(connectionString);

oleConnection.ServerVersion抛出System.InvalidOperationException类型的异常。

我查看了SQL Server Management Studio(SSMS): ... {数据库名称} - >属性 ......安全 - > Windows身份验证模式(单选按钮),仅登录失败(单选按钮) ...权限 - >查看服务器权限 - > {computer name} - >有效(标签) - >一切都列出

2 个答案:

答案 0 :(得分:0)

Initial Catalog想要数据库的逻辑名称:

"Initial Catalog=MyDatabaseExample;"

否则,如果您希望将MDF文件附加到现有的SQLExpress实例,则需要使用AttachDBFilename

"AttachDBFilename=C:\\...\\SqlServerDbExample.mdf";

可以在关于SqlConnection.ConnectionString的文档中找到SQL Server连接字符串中使用的密钥\值对的非常详细的列表,尽管我不确定是否所有内容都适用于OleDbConnection。

我不知道是否有某种要求使用OleDb,但如果没有什么可以阻止它我建议直接使用SqlClient类而不是OleDb类。

答案 1 :(得分:0)

史蒂夫是对的。这有效:

string connectionString =
  "Provider=SQLOLEDB.1" + ";" +
  "Integrated Security=SSPI" + ";" +
  "Persist Security Info=False" + ";" +
  "Trusted_Connection=False" + ";" +
  "Data Source=CTE-LAPTOP\\SQLEXPRESS" + ";" +
  "Initial Catalog=SqlServerDbExample" + ";" + //Database name
  "AttachDBFilename=C:\\...\\SqlServerDbExample.mdf" + ""; //File name

OleDbConnection oleConnection = new OleDbConnection(connectionString);