none
Web サービスが他のWebページとDBが競合する RRS feed

  • 質問

  • web.configの指定(ウィザードで自動作成)

    connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PERSONAL.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

     

     

    他のWebページの指定(ウィザードで自動作成)

        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            SelectCommand="SELECT * FROM [table]"></asp:SqlDataSource>

     

     

    作成したWeb サービスの指定(データベースエクスプローラの接続文字列からコピー)

            using (SqlConnection mySqlConnection = new SqlConnection("server=(local)\\SQLExpress;AttachDbFilename=C:\\Documents and Settings\\****\\My Documents\\Visual Studio 2005\\WebSites\\WebSite2\\App_Data\\PERSONAL.mdf;Integrated Security=SSPI;User Instance=true;database=PERSONAL"))

    で他のWebページで確認してからWeb サービスを実行すると

    System.Data.SqlClient.SqlException: Cannot open user default database. Login failed.
    Login failed for user '****\****'.

    となってしまう。

     

     

    何がおかしいんでしょうか?

    2006年3月2日 6:16

回答

  • Webサービスの接続文字列の指定がおかしいんじゃないですかね。

    using (SqlConnection mySqlConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ToString())

    と、web.configの設定を読み込んであげてみたらどうでしょうか。

    2006年3月2日 15:27

すべての返信

  • Webサービスの接続文字列の指定がおかしいんじゃないですかね。

    using (SqlConnection mySqlConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ToString())

    と、web.configの設定を読み込んであげてみたらどうでしょうか。

    2006年3月2日 15:27
  • というより

    |DataDirectory|\PERSONAL.mdf

    の意味を理解されていないというか、User Instance=True の場合の ディレクトリリダイレクトを混同されているような気がします。

    User Instance=True で |DataDirectory|\xxxxx.mdf と指定すると実行時に

    %USERPROFILE%\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS

    にコピーされたシステムデータベースと App_Data(|DataDirectory|) ディレクトリにある MDF でデータベースを動的に作成(アタッチ)します。

    このとき、同じファイルが、すでにアタッチされている場合、競合のエラーになります。
    複数のアプリケーションで同一のデータベースを使う場合は
    、sp_attach_db で、SQL Server 2005 Express に登録して、Initial Catalog=XXXXX;User Instance=False; という SQL Server 2000 までと同じやり方で接続してください。

    2006年3月2日 16:36
  • どっとねっとふぁんさん、ありがとうございました。

    まさしくやりたいことはそれでした。WebConfigurationManager、やってみます。

    2006年3月3日 3:00
  • おがわみつぎさん、ありがとうございました。

    Webサービス作成時も自動でDBアクセスが作れたら良いです。

    Webサービス関連のヘルプも見ましたが、見本は簡単な計算しかなくて参考になりませんでした。

     

    2006年3月3日 3:11