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

VB.NETからSQL Serverへの接続

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

初めて投稿させていただきます。

SQL ServerのDB更新のために、事前のデータ加工とDB更新を行わせるWindowsアプリを作成しています。
具体的にはWeb公開情報をインターネット経由で取得し、それをDB用に加工してUpDateさせようとするものです。

Visual Basic.NETで開発し、Visual Studio2005のデバッガ上で走らせると、思い通りの動作、結果がえられましたので、「完成!!」と思いビルドしました。
ところが、できあがったEXEを実行させると次のエラーが発生します。

「サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした)」

サーバーは見つかるのだが、接続の確立ができないというエラーの内容から、ユーザーの認証と思いSQLの権限等をみたのですが、問題ないようなのです。(わからないだけでしょうが・・・)

app.configの記述は次の通りです。

<connectionStrings>
<add name="DBUpDate.My.MySettings.DBDataSQLConnectionString"
connectionString="Data Source=TS-NOTE01t\SQLEXPRESS;
_ User Id=TS-NOTE01\Kaihatsu_MS;Password=****;
_ Initial Catalog=DBDATASQL;Integrated Security=true"
providerName="System.Data.SqlClient" />
</connectionStrings>

SQL Server自体には全くの素人のため、解答に必要な情報に不足があることと思いますが、よろしくご教授願います。

ちなみにSQL Serverはアプリを実行させる同じマシン上で動いています。
こんにちは、私もあまり詳しくないのではずしているかもしれませんが

VS2005 のエディションが Express だと SQLServer に接続できなかったように思います。

http://www.microsoft.com/japan/msdn/vstudio/products/compare/default.aspx
早速のご教授ありがとうございます。

やはり情報が足りなすぎました。申し訳ありません。

> VS2005 のエディションが Express だと SQLServer に接続できなかったように思います。

開発環境は、VS2005 Professional Edition、SQL Server2005 EXPERSS、OS WinXP
ですので、問題はないのかな?と思います。

VS2005のデバッガでRUNさせた場合のUserと、EXEでRUNさせた場合のUserとは異なるということでしょうか??
#SQL Serverそのものの話はご容赦m(_ _)m

付属等の外部のツールからそもそも接続できるか。
接続直前でConnectionStringを表示させて確認。

このくらいはやっときましょうよ。
#たまに見かけるけど、設定ファイルの値が使われていないということもある

> 「リモート接続を許可しないようになっていることがエラーの原因である可能性」
メッセージさんは認証云々とは言ってませんよね。
どう見ても設定云々と言ってます。

また、
> 「接続しているときときにこのエラーが発生した場合は」
と断りが入れてあります。
これは逆にその場合でなくても発生するエラーであることがわかりますね。
あら、確かにデバッグできているんだから当然でしたね。

> 開発環境は、VS2005 Professional Edition、SQL Server2005 EXPERSS、OS WinXP
> ですので、問題はないのかな?と思います。

その環境なら問題ないと思います。

> VS2005のデバッガでRUNさせた場合のUserと、EXEでRUNさせた場合のUserとは異なるということでしょうか??

ごめんなさい、それは私にもわかりません。
たぶんそんなことはありえないと思うんですが…。
私はまだ使ったことがありませんが、逆アセンブラを使えば確認できるのかもしれませんね。
まどかさん、したっぱさん、ありがとうございます。

> 付属等の外部のツールからそもそも接続できるか。

Udlファイルを作り、接続テスト→OKの状態のConnectionStringを使用してもだめでした。
また、SQL Server自体は、別途ASP.NETで稼働しており、そのConnectionStringと設定は同じにしています。(User Idは加えていますが)

>>「リモート接続を許可しないようになっていることがエラーの原因である可能性」

「サーバーへの接続を確立しているときにエラーが発生しました」ということなので、User認証、権限の問題なのかな・・・思ってしまいました。
同一マシンでの稼働ですので該当しないと思いましたが、一応接続許可設定およびポート設定はチェックしています。

いずれにしても、デバッガは何か不足なところを補って接続してくれていると思いますが、教えてはくれません・・・
何かとんでもなく単純な理由のような気がしてます。
認証の問題ではないように思います。認証の問題であれば、ログインできないなどというメッセージが出るからです。
根本的にアプリケーションからSQL Serverが見えていない気がするのですが、sqlcmdを使って接続できるかどうかを確かめてみてはいかがでしょうか?
trapemiyaさんありがとうございます。

> 認証の問題ではないように思います。認証の問題であれば、ログインできないなどというメッセージが出るからです。

確かにそうですね。

> sqlcmdを使って接続できるかどうかを確かめてみてはいかがでしょうか?

sqlcmd -S TS-NOTE01t\SQLEXPRESS
とするとコマンドプロンプトが" 1> " と表示されました。
調べると接続された状態とのことですので、見えているのだと思います。

相談するにしても、もう少し私にSQL Serverの知識があれば、と思うのですが・・・すみません。
■No20580に返信(OJINさんの記事)
> ちなみにSQL Serverはアプリを実行させる同じマシン上で動いています。
とのことなのではずしているかもしれませんが、

スタートメニューからSQL Server 2005のところのSQL Server Configuration Managerを起動して、
SQL Server 2005 ネットワーク構成>SQLEXPRESSのプロトコルで
「名前付きパイプ」「TCP/IP」を有効にしてみるとどうなりますでしょうか。
念のため有効にしたあとサービスを再起動してみてください。
IIJIMASさん、ありがとうございます。

> スタートメニューからSQL Server 2005のところのSQL Server Configuration Managerを起動して、
> SQL Server 2005 ネットワーク構成>SQLEXPRESSのプロトコルで
> 「名前付きパイプ」「TCP/IP」を有効にしてみるとどうなりますでしょうか。

Management Sutudioは使っていたのですが、Configuration Managerはみていなかったので、
いさんで起動してみましたが、両方とも「有効」になっていました。(/_;)
Configuration ManagerにSQL Server Browserがあると思うのですが、それは動いていますでしょうか? 動いていなければ、とりあえず動かしてみてください。

前述のsqlcmdの結果から、Windows認証でつながるようですので、接続文字列としては、とりあえず以下でつながると思います。

Data Source=.\SqlExpress;Initial Catalog=データベース名;Integrated Security=True
■No20580に返信(OJINさんの記事)
> 初めて投稿させていただきます。
>
> SQL ServerのDB更新のために、事前のデータ加工とDB更新を行わせるWindowsアプリを作成しています。
> 具体的にはWeb公開情報をインターネット経由で取得し、それをDB用に加工してUpDateさせようとするものです。

  その出来上がったアプリは、どこで動作させたのでしょうか?

  ローカルネット?要はSQL Serverの稼動するネットワークと同じ
  セグメント?
  それともインターネット経由?

  ローカルネットでないならば、VPN接続しない限り、Winddow認証
  は成功しません。SQL認証になります。

  各マシンの配置やどこがインターネット経由になるのか、その辺が
  解らないので、解決しませんヨ!

以上。
急用で作業できず、返信できなくて申し訳ありませんでした。

> Configuration ManagerにSQL Server Browserがあると思うのですが、それは動いていますでしょうか?

確認しましたが動いています。

> 前述のsqlcmdの結果から、Windows認証でつながるようですので、接続文字列としては、とりあえず以下でつながると思います。

> Data Source=.\SqlExpress;Initial Catalog=データベース名;Integrated Security=True

そうですよね・・・

> その出来上がったアプリは、どこで動作させたのでしょうか?

前述の通り、同じマシンで動かしています。
現在開発段階ですので、同一PCにSQL Server、開発環境がある状態です。

VS2005(VB.NET)でコーディング→デバッガ上でテストラン→問題なく稼働
→ビルド→同じPC、UserでそのままEXEを起動→接続できない

という状況です。
補足です。

> 各マシンの配置やどこがインターネット経由になるのか、その辺が解らないので、解決しませんヨ!

FormにBrowserコントロールを配置して、インターネット経由でデータを収集しています。(アクセスは出来ている)
SQLへのアクセスがインターネット経由になるわけではなく、あくまでSQLへはローカル接続です。
解決しました!!

ConnectionStringの変更をapp.configで行っていましたが、アプリケーションプロパティの「設定」タブが旧設定のままとなっていました。

この件でわかったことが2点
1.デバッガ上(インタプリタ)で稼働させた場合はapp.config優先、コンパイルした後はアプリケーションプロパティの「設定」優先となる。

2.VS2005のデバッガでは、アプリケーションプロパティの「設定」を変更するとapp.configが同期して変更されるが、app.configを変更した場合は同期が行われない。

皆様よりいろいろお知恵を拝借しありがとうございました。
もっと勉強せねばと反省しきりです。
解決済み!

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