none
VS Standard EdisionでSqlServerへのアクセス RRS feed

  • 質問

  • 個人でVisualStudio StandardEditionのC#にてデータベースSQL Serverをマスターしたいと思い挑戦しましたが、SqlConnectionの open()で例外SqlException.Numberが4064)となり実行できませんでした。原因を教えてください。回避方法はありますか?。また、例外コードの一覧表はどこにあるのでしょう?。
    2006年4月8日 10:58

すべての返信

  • 現在の ConnectionString を教えてください。

    また、例外の詳細を見る必要があるので、Open メソッドで例外を捕捉してください。


        try {
            connection.Open();
        } catch (System.Exception ex) {
            MessageBox.Show(ex.ToString());
        }

     

    2006年4月8日 11:05
  • じゃんぬねっとさん、早速のご回答ありがとうございます。

    1. connection string は

     ① public static string DBFile = \PartsMaster\PartsMaster.mdf";

    がopen()のメソッド外にあり、以下がconnection stringです。

    SqlConnectionStringBuilder connectStringBuilder = new SqlConnectionStringBuilder();

    connectStringBuilder.DataSource = @".\SQLEXPRESS";

    connectStringBuilder.AttachDBFilename = DBFile;

    connectStringBuilder.IntegratedSecurity = true;

    connectStringBuilder.UserInstance = true;

    using (SqlConnection connection = new SqlConnection

    (connectStringBuilder.ConnectionString))

       {   connection.Open(); ...

    2. ご指摘のToString()で出力した内容はコピーできませんのですべてここに書くことはで

    きませんが、

    先頭の日本語は「ユーザーの既定データベースを開けません。ログインに失敗しまし。

    ユーザー’ASUS¥hide’はログインできませんでした。」とあり後長々と「場所 ....」がありました。

     3.データベースはSQL Saver Management Studio Expressにて確認済みです。

     以上、よろしくお願いいたします。例外コード表はどこにあるのでしょうか。

    2006年4月8日 11:58
  • とりあえず、以下を試してみて下さい。

    SQL Server のインスタンスに接続したときのエラー メッセージ : "ユーザーの既定データベースを開けません"
    http://support.microsoft.com/kb/307864/ja

    >以上、よろしくお願いいたします。例外コード表はどこにあるのでしょうか。

    SQLserver2000のBOL(Books Online)にはありますが、SQLserver2005のBOLでは見つけられていません。まだ無いのかなぁ?

    2006年4月8日 13:26
    モデレータ
  • ユーザーインスタンスが true になっているけど,
    ユーザーインスタンスを使う場合は,
    Accessのmdbファイルのようにファイルとして使う場合です。
    あらかじめデータベースサーバーに.mdfファイルをアタッチしておかないで,
    動的に使う場合です。

    目的がそうだとして,
    ユーザーインスタンスを指定する場合,
    .mdfのパスは絶対パスにするか,
    exeの位置からの相対パスにする場合は,
     |DataDirectory|\フォルダ名\test.mdf
    のような感じで,わざわざ指定する必要があるようです。(たぶん)

    カレントディレクトリからの相当パスは,
    カレントディレクトリを移動できてしまうので
    いろんな意味で嫌ったのかもしれません。(単なる推測)


    ユーザーインスタンスは,
    権限を与えなくてもアタッチ可能にして
    気軽にSQL Serverを利用できるようにする2005からの新機能で,
    たぶん,ふつうは,
    .mdfファイルは,権限を持っている人があらがしめアタッチしておいて,
    AttachDbFilenameやUser Instanceは,使わずに,
    Initial Catalog に そのユーザーのデフォルトの(論理)データベース名を指定します。

    2006年4月8日 16:08
  • じゃんぬねっとさん、trapeniyaさん、稍丼 さん

    ありがとうございました。解決いたしました。

    稍丼 さんのおっしゃる通り、User Instanceを使わず、Initial Catalogを使うように

    しましたら、正常につながりました。

    2006年4月9日 1:14