DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ASP.NETでSQLserverに接続する方法を教えてください

環境/言語:[windows2000pro]
分類:[ASP.NET]

ASP.NETでSQLserver(MSDE)に接続しようとしているのですが、うまく接続できません。
色々資料等を探しているのですが・・・
具体的には以下のコーディングをしています。
SQL = "SELECT ・・・・ "
Dim my_connection As SqlClient.SqlConnection
Dim my_command As SqlClient.SqlCommand
Dim my_data As SqlClient.SqlDataReader
Dim my_Adapter As SqlClient.SqlDataAdapter
Dim my_dataset

DataGrid1.CurrentPageIndex = 0
my_connection = New SqlClient.SqlConnection("--DB接続のパラメータを記述---")
my_Adapter = New SqlClient.SqlDataAdapter(SQL, my_connection)
my_dataset = New DataSet
my_Adapter.Fill(my_dataset, "--テーブル名---")
DataGrid1.DataSource = my_dataset
DataGrid1.AllowPaging = True
DataGrid1.PageSize = 15
DataGrid1.DataBind()
my_connection.Close()
これを実行すると「SQL Server が存在しないか、アクセスが拒否されました」と表示されます。
エラー行は my_Adapter.Fill(my_dataset, "--テーブル名---") になっています。
ASP.NETはまったくの初心者で四苦八苦しています。
どなたかご教授願えませんか? 参考になるサイトなどありましたら教えてください
お願いします。
>my_connection = New SqlClient.SqlConnection("--DB接続のパラメータを記述---")

DB接続のパラメータを記述 が間違ってるんじゃない?
■No11046に返信(medakaさんの記事)
> >my_connection = New SqlClient.SqlConnection("--DB接続のパラメータを記述---")
>
> DB接続のパラメータを記述 が間違ってるんじゃない?
>
DB接続のパラメータはツールボックスのSqlConnectionのプロパティでconnectionstringで接続テストを行い、正常に接続されたパラメータをコピーして使っているのですが・・
こんにちは、じゃんぬ です。

■No11047に返信(ちゃこさんの記事)
> DB接続のパラメータはツールボックスのSqlConnectionのプロパティで
> connectionstringで接続テストを行い、正常に接続されたパラメータをコピーして使っているのですが・・

やっていることは、書いておくべきだと思いますよ。(^^)

では、次に考えられるのは SQL という変数に格納された、SQL コマンドですね。
今回の例では、あんまり考えられないですけど、あとは権限などですね。

# こういった情報も最初に出しておけば、無駄なやりとりはなくて済むと思いませんか?
■No11048に返信(じゃんぬねっとさんの記事)
> こんにちは、じゃんぬ です。
>
> ■No11047に返信(ちゃこさんの記事)
>>DB接続のパラメータはツールボックスのSqlConnectionのプロパティで
>>connectionstringで接続テストを行い、正常に接続されたパラメータをコピーして使っているのですが・・
>
> やっていることは、書いておくべきだと思いますよ。(^^)
>
> では、次に考えられるのは SQL という変数に格納された、SQL コマンドですね。
> 今回の例では、あんまり考えられないですけど、あとは権限などですね。
>
> # こういった情報も最初に出しておけば、無駄なやりとりはなくて済むと思いませんか?
じゃんぬさんお世話になります。
ご指摘の通りです。すみません小出しで!
SQL文もSQLManagerで作成して動作を確認したものです。
DBの権限については接続パラメータで"user id=sa;password=**"と指定し、DBのセキュリティでUser:saに全ての権限をつけています。
VB.NETで開発したクラサバのプログラムでは何事もなく接続されるのですが(以下の接続で)
Me.SqlConnection1.Open()
Me.SqlCommand1.CommandText = SQL
Me.SqlCommand1.ExecuteNonQuery()
Me.SqlConnection1.Close()
VB.NETとASP.NETで違いはあると思うのですが・・それが何だか判らない始末で、三日間ほど試行錯誤しながら堂堂巡りをしている状態です。
また、上記の接続方法もASP.NETで試してみたのですがOpen文で同じ結果になりました。
お世話になります。ちなみにスタックトレースは以下の通りです
[SqlException: SQL Server が存在しないか、アクセスが拒否されました。]
System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction)
System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
System.Data.SqlClient.SqlConnection.Open()
System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState)
System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
DMS.WebForm1.Page_Load(Object sender, EventArgs e) in C:\Inetpub\wwwroot\DMS\DMS_Menu.aspx.vb:70
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain()
また、DBは同一PC上にあります(いずれはサーバ機に移動します)
ASPNET ユーザアカウントの権限がどうとかいう話をよく目にしますけど、その辺りは大丈夫なのでしょうか?
#↓とかかなぁ? ‥‥って、また全然関係ないこと言ってるかも(///)< ASP.NET 未経験の私

[HOWTO] .NET アプリケーション用に SQL Server のセキュリティを構成する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;815154
■No11057に返信(深山さんの記事)
>  ASPNET ユーザアカウントの権限がどうとかいう話をよく目にしますけど、その辺りは大丈夫なのでしょうか?
> #↓とかかなぁ? ‥‥って、また全然関係ないこと言ってるかも(///)< ASP.NET 未経験の私
>
> [HOWTO] .NET アプリケーション用に SQL Server のセキュリティを構成する方法
> http://support.microsoft.com/default.aspx?scid=kb;ja;815154
深山さんアドバイスありがとうございます。
早速やってみたのですが・・結果は同じでした。
また、何かお気づきの点がありましたらご教授お願いいたします。
■No11052に返信(ちゃこさんの記事)
> DBの権限については接続パラメータで"user id=sa;password=**"と指定し、DBのセキュリティでUser:saに全ての権限をつけています。
> VB.NETで開発したクラサバのプログラムでは何事もなく接続されるのですが

MSDEはインストール時にsecuritymode=sqlの設定をせずにデフォルトで
インストールすると、Windows認証モードになるかと思います。
この状態でASP.NETから接続するには、データベースやテーブルに対して
XPやWindows2000だったらASPNETユーザ、2003 Serverの場合はNETWORK SERVICE
ユーザに権限を与える必要があります。

このあたりは大丈夫ですか?
関係ないところを突っ込む。

> Dim my_dataset

As System.Data.DataSet はなにゆえに省略?
■No11059に返信(小野@どっとねっとふぁんさんの記事)
> ■No11052に返信(ちゃこさんの記事)
> MSDEはインストール時にsecuritymode=sqlの設定をせずにデフォルトで
> インストールすると、Windows認証モードになるかと思います。

はい、確かにMSDEのインストール時はディフォルトだったと思います。

> この状態でASP.NETから接続するには、データベースやテーブルに対して
> XPやWindows2000だったらASPNETユーザ、2003 Serverの場合はNETWORK SERVICE
> ユーザに権限を与える必要があります。
>
> このあたりは大丈夫ですか?

すみません 知識不足でよく理解できません
先程の深山さんのご指摘の「SQL Server のセキュリティを構成する方法」の手順でしょうか?
お忙しいところ、お手数をおかけします。教えてください。
2005/06/01(Wed) 15:32:20 編集(投稿者)

 もう少し調べてみました。どうやらここに一通り書かれているようです。
#小野さんからご指摘のあった内容についても触れられています。

Web アプリケーションから SQL Server へのアクセス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vbconAccessingSQLServerFromWebApplication.asp

#リンクミスを修正
深山さん、小野さん、じゃんぬねっとさん、medakaさん貴重なご指導、有難うございました。
解決いたしました。ふぅ〜!
今夜はぐっすり眠れます。感謝します。
今後ともご指導の程お願いいたします。
解決済み!
やー、解決して脱力されてるところ申し訳ないのですけれど‥‥(^_^;)

 結局のところ

  ・何が原因でエラーとなり
  ・どのようにすることで解決できた

のでしょう?
 お時間のあるときで構いませんので、差し支えなければフィードバックして頂けませんでしょうか?
#当面予定はありませんけれど、未来の私の助けになるかも知れませんし ;-)
■No11065に返信(深山さんの記事)
>  やー、解決して脱力されてるところ申し訳ないのですけれど‥‥(^_^;)
>
>  結局のところ
>
>   ・何が原因でエラーとなり
>   ・どのようにすることで解決できた
>
> のでしょう?
>  お時間のあるときで構いませんので、差し支えなければフィードバックして頂けませんでしょうか?
> #当面予定はありませんけれど、未来の私の助けになるかも知れませんし ;-)
そうですね!自分だけ納得して終わっちゃいました。
結局、深山さんのご指摘にあった「Web アプリケーションから SQL Server へのアクセス」で
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vbtskaccessingsqlserverusingwindowsintegratedsecurity.asp
の「Windows 統合セキュリティを使用した SQL Server へのアクセス」を全て実行しました。
1.IISと同じコンピュータでSQLを使用していたので認証方法を「匿名アクセス」をオフにしました。
2.Web.config ファイルを設定する・・でconfigファイルに <identity sonate="true"/> を追加しました。
3.SQL Server の接続文字列に、属性 Trusted_Connection=Yes を含め、ユーザー名属性とパスワード属性を削除しました(その前まではユーザ名とパスワードを指定していました)
以上を設定してトライしたら動作しました。
以前ASP(.netではない)でコーディングしたときはすんなりいったのでたかをくくっていました。
最初はどこから手をつけていいか途方にくれていましたが皆様のご親切なアドバイスで解決して本当に感謝しています。
これからもちょくちょくお邪魔するかも知れませんが何卒宜しくお願いします。
すみません解決済みにするのを忘れていました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板