2012-05-12 8 views
0

私はC#のを経由してデータベースに接続しようとしているが、私はそうするとき、私は非常に助けにならないエラーメッセージが出てい:データベースに接続しようとすると「エラー:OLEを初期化できません」というメッセージが表示されるC#

08:44:17: Error: Cannot initialize OLE 08:44:17: Error: Cannot initialize OLE

私は解決策を探してみましたが、私はしました成功しなかった。私もコンピュータを再起動しようとしましたが、どちらも助けにはなりませんでした。

私は、SQL Server 2008を実行していて、ここでは関係データベースのコードは次のとおりです。

/// <summary> 
/// Connects to a given database and returns the database connection. 
/// </summary> 
/// <param name="file">The database file name.</param> 
/// <returns>The database connection.</returns> 
public static SqlConnection ConnectToDb(string file) 
{ 
    //initialize generic path 
    string path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
    path = path.Replace("bin\\Debug\\MediaPlayer.exe", ""); 
    path += "Database.mdf"; 

    string connectionPath = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + path + ";Integrated Security=True;User Instance=True"; 
    SqlConnection connection = new SqlConnection(connectionPath); 
    return connection; 
} 

/// <summary> 
/// Executes a SQL query in a given database. 
/// </summary> 
/// <param name="file">The database file name.</param> 
/// <param name="query">The SQL query to execute.</param> 
public static void ExecuteQuery(string file, string query) 
{ 

    SqlConnection connection = ConnectToDb(file); 
    connection.Open(); 
    SqlCommand command = new SqlCommand(query, connection); 
    command.ExecuteNonQuery(); 
    connection.Close(); 
} 

これは、私はいくつかのプロジェクトのために使用しているデータベース・コードであり、それは常に前に働いています。

ExecuteQueryメソッドのconnection.Open()行でエラーが呼び出されました(私が他の行をコメントアウトしたのでこれを知っています)。

何か助けていただけたら助かります。

+0

64ビットオペレーティングシステムで実行している場合は、プラットフォームとしてx86をターゲットにしていることを確認してください。 – LarsTech

+0

プロジェクトの[プロパティ]ページの[ビルド]パネルの下に、Active(x86)がプラットフォームとして選択されています。 – Daniel

+0

誰でも? :(このバグで一日無駄になりました。) – Daniel

答えて

0

あなたのパスがDatabase.mdfファイルの場所と一致しないと思います。

は、デバッグしようとあなたのpath変数の実際の値を参照してください、あなたはReplaceは動作しませんでしたし、あなたのpathデバッグ\ MediaPlayer.exeDatabase.mdf \ ビンのようにいろいろ書いに見えることがあります。

接続文字列をReflectionで検索する代わりにapp.configに入れることをお勧めします。


更新

それは、この問題の理由は、あなたのSQL ServerがDeploying SQL Express database files with ClickOnce App using OLEで説明したように下で実行されているアカウントの権限が不足していることが考えられます。

データベースファイルをプロジェクトのデバッグフォルダとは別の場所に移動してみてください。

+0

これは問題ではなく、パスは問題ありません。私はここに投稿する前にトリプルチェックしました。そして、app.configというアイデアのおかげで、Reflectionよりもエレガントに聞こえます。 – Daniel

+0

@ダニエル私はもう少し掘り下げて、SQL Server OLEとUACに関して何かを見つけました。 – Filburt

+0

さて、Database.mdfファイルは、デバッグフォルダとは別のフォルダにありますが、プログラムを実行すると(Ctrl + F5)、以前に削除したとしても、データベースはデバッグフォルダ内で再作成されます。私は仕事のディレクトリ全体を別のフォルダ(Documents)に動かすことを試みましたが、それはうまくいくと思っていましたが、助けにはなりませんでした。 – Daniel