C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: C#でSQL Serverをオープンしたらエラー


(過去ログ 58 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■32847 / inTopicNo.1)  C#でSQL Serverをオープンしたらエラー
  
□投稿者/ ふばこ (3回)-(2009/02/16(Mon) 17:04:47)

分類:[C#] 

Windows XP, Visual C# 2008 Express, SQL Server 2008

C#を勉強してて超単純な事をしたいのですがうまくいきません。
単にデータベースを開いて更新やらしようと思ってるのですがオープンでエラーになります。

下記のURLを参考にしてるのですが、objConn.Open();のとこでエラーになります。
http://support.microsoft.com/kb/307587/ja
URLはC# 2005ですがここらの基本は仕様変わってないだろうと勝手に思って参考にしてます。
エラーは「オペレーティング システム エラー 5(アクセスが拒否されました。) により、ファイル "C:\Documents and Settings\xxxxxxxx\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\Pubs.mdf" のディレクトリ参照に失敗しました。」と出ます。

PUBSサンプルデータベースを入れようとSQL2000SampleDb.msiを実行しましたがNORTHWND_log.ldfというのが作成されただけでPubs.mdfが見当たらないので自分で作りました。
作った手順は、C#からテストプロジェクトを作り、メニューのプロジェクト, 新しい項目の追加、サービスベースのデータベースで作成しました。
WindowsFormsApplication1の中にPubs.mdfとPubs_log.LDFがいます。
いつの間にかWindowsFormsApplication1\bin\Debugにも存在しますが・・・

URLでは
sConnectionString = "Password=<strong password>;User ID=<username>;"
+ "Initial Catalog=pubs;"
+ "Data Source=(local)";
となっていましたがうまくいかないのでいろいろ調べて下記のように変更しました。
sConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFileName=|DataDirectory|\\Pubs.mdf;
Initial Catalog=Pubs;Integrated Security=SSPI;Connect Timeout=2";

これだけの情報で何か分かるでしょうか?
ここの人なら超初歩的なことなんでしょうがC#初挑戦なので1日いろいろ試したのですがだめでした。
引用返信 編集キー/
■32855 / inTopicNo.2)  Re[1]: C#でSQL Serverをオープンしたらエラー
□投稿者/ ロック (163回)-(2009/02/16(Mon) 20:05:32)
No32847 (ふばこ さん) に返信

>Pubs.mdfが見当たらないので自分で作りました。
が気になりますが、Management Studio Expressあたりで問題なく参照できる
DBだと信じて。

とりあえず、
>sConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFileName=|DataDirectory|\\Pubs.mdf;
の|DataDirectory|を使用せずに、もっと浅いフォルダに置いたPubs.mdfを絶対パスで
指定するとどうなりますか? (例えば、AttachDbFileName=c:\\test\\Pubs.mdf)

引用返信 編集キー/
■32902 / inTopicNo.3)  Re[2]: C#でSQL Serverをオープンしたらエラー
□投稿者/ ふばこ (4回)-(2009/02/17(Tue) 14:48:20)
No32855 (ロック さん) に返信

> 指定するとどうなりますか? (例えば、AttachDbFileName=c:\\test\\Pubs.mdf)
「AttachDbFileName=c:\\tmp\\Pubs.mdf」で行ったところ1回目は「タイムアウトに達しました。・・・」とエラーになるも2回目以降は正しく動きました。

データベースエクスプローラーのPubs.mdfをクリックしてプロパティーを見てみると接続文字列というのがあったのでこの内容を指定してみました。
「Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Documents and Settings\xxxxxxxx\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Pubs.mdf";Integrated Security=True;User Instance=True」
これだと問題なく正しく動きました。
昨日との大きな違いは「\bin\Debug」の上部フォルダまでの指定になってる部分だと思います。

> が気になりますが、Management Studio Expressあたりで問題なく参照できるDBだと信じて。
それを入れてみたんですが起動したらサーバー名聞かれるのですがローカルなのでどうするのだろうと思いつつ<参照>,ネットワークサーバーの中のデータベスエンジンに自分のマシン名があったので選択したものの「ネットワーク関連、またはインスタンス固有のエラー・・・」と出てよく分かりませんでした。
一番上のサーバーの種類ってとこでローカルとか選択できるのかと思ったのですがグレーで「データベースエンジン」となってて変更できません。
ファイル,開くでPubs.mdf選択したら「C:\...\Pubs.mdfに対するエディターがありません」となります。

何が何だかよく分かりませんが本職の依頼(Delphi)がきたのでC#の勉強は当面中断となってしまいました。
次勉強する時は本を買って勉強しようと思います。
ロックさん、ありがとうございました。
解決済み
引用返信 編集キー/
■32904 / inTopicNo.4)  Re[3]: C#でSQL Serverをオープンしたらエラー
□投稿者/ ちゃっぴ (209回)-(2009/02/17(Tue) 15:02:45)
ちゃっぴ さんの Web サイト
User profile に mdf を格納しているようなので、ACL の問題でしょう。

SQL Server Express Edtion 自体はその service の起動 account で動作します。
Install 時に指定するようになっていて、default だと Network Service だったかな。
いつも専用の user account 作るので忘れた。

User profile の ACL は Administrators および system 対象の user 以外扱えないようになっているので、対象の file の ACL に Network Service を追加すればいけるんでないの?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -