初めての質問です。
開発環境は
Microsoft Visual C++ 2008 Express Edition
OS XP SP2
Microsoft SQL Server 2005
です。
VC++でSQL Serverに接続しようと思っているのですが
初心者ゆえ、殆ど(専門家から見れば、ほぼ全く)分かりません。
Microsoft Visual C++ 2008 Express Editionのため
MFCは使用できず、ODBCも同等の理由ゆえ使えないみたいです。
そこでOLE-DBにてSQL Serverへの接続を試みようと思いました。
しかしgoogleにて検索をかけてみるも、よく分からず
これといった情報や手がかりが掴めませんでした。
(一応、プロバイダーや、コンシューマテンプレートなどと
いった単語は文字通りの意味で目にしました)
SQL Serverへ接続するには、どうすればいいでしょうか?
何か必要な知識や、キーワード、を教えて頂ければ幸いです。
No.1ベストアンサー
- 回答日時:
この手の質問はプログラミングカテゴリならすぐ回答がつくのかもしれませんが、VB/VC++のExpress Editionはデータベースへの接続はサポートしておらず、データベースファイルをアタッチして接続するしかありません。
その辺が躓いている理由なのではないでしょうか。VC++は書かないので拙いソースですが、接続のポイントは理解いただけるのではないかと思います。
#include "stdafx.h"
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
int main(void)
{
String^ str;
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\(データベースファイル).mdf;Integrated Security=True;User Instance=True");
sqlConn->Open();
str = "INSERT INTO テーブル VALUES (.....)";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);
sqlCmd->ExecuteNonQuery();
sqlConn->Close();
return 0;
}
参考になれば、幸いです。
>>jamshid6さん
ありがとうございます。
非常に参考になりました。
>VB/VC++のExpress Editionはデータベースへの接続はサポートしておらず、データベースファイルをアタッチして接続するしかありません。
そうだったのですか…
無知ゆえ、ドジな質問をして申し訳ございませんでした。
アタッチについて、更によく調べながら、jamshid6さんのご厚意を
無駄にしないプログラムを作ります。
本当にありがとうございました。
No.6
- 回答日時:
>追加情報: ファイル C:Documents and Settings yukenMy Documents est2.mdf の自動的に名前が付けられたデータベースをアタッチできませんでした。
このメッセージを見る限り、明らかにmdfのパスを
C:\Documents and Settings\yuken\My Documents\est2.mdf
とされていますね。VC++の場合、接続文字列をただコピペしてもだめです。
VC++であれば、C:\\Documents and Settings\\yuken\\My Documents\\est2.mdfという風に「\」を重ねて書かないといけないのではないですか?
(こちらでやっても、「\」1つでは同じエラーがでますよ)
ついでにマイドキュメントではなく、C:\TEMPなどもっとパスが短いところで試してみてください。
(もともとマイドキュメントは権限が本人にしかないので、権限が理由のときに切り分けが難しくなります)
この回答への補足
>>jamshid6さん
ありがとうございます!
接続を完全に成功させることができました!
また、パスが短い場所や、マイドキュメント以外の場所でも、同じように
接続に成功することができました!
本当に、ありがとうございました!
No.5
- 回答日時:
データベースエクスプローラから該当のデータベースファイルに接続できて、その中身(テーブル等)がデータベースエクスプローラから参照できるのであれば、環境の問題の可能性は低いと思います。
(VC++Express自体がちゃんと接続できているということになるので)
念のため、データベースエクスプローラの接続追加画面から、新しくデータベースファイルを作成して試してみていただければと思います。
この回答への補足
はい。
それも試してみたのですが…
実行が停止して躓いているところをよく確認してみたところ
str = "INSERT INTO Table1 (test) VALUES ('1')";
の箇所で問題が発生しているようです。
(何度も変更や新規作成などをしているので、これは先ほど実行した
ときの構文です)
何か、ここで問題が起きているのでしょうか?
場所 System.Data.SqlClient.SqlConnection.Open()
場所 main() 場所 c:\documents and settings\tyuken\my documents\visual studio 2008\projects\project1\aaaaa\aaaaa\aaaaa.cpp:行 19</ExceptionString><DataItems><Data><Key>HelpLink.ProdName</Key><Value>Microsoft SQL Server</Value></Data><Data><Key>HelpLink.EvtSrc</Key><Value>MSSQLServer</Value></Data><Data><Key>HelpLink.EvtID</Key><Value>15350</Value></Data><Data><Key>HelpLink.BaseHelpUrl</Key><Value>http://go.microsoft.com/fwlink</Value>
</Data><Data><Key>HelpLink.LinkId</Key><Value>20476</Value></Data></DataItems></Exception></TraceRecord>
'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました。
追加情報: ファイル C:Documents and SettingsyukenMy Documentsest2.mdf の自動的に名前が付けられたデータベースをアタッチできませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC 共有に配置されています。
プログラム '[532] aaaaa.exe: マネージ' はコード -532459699 (0xe0434f4d) で終了しました。
という出力がありました。
一体、何が原因なのでしょうか…
No.4
- 回答日時:
>AttachDbFilename=C:\\db1
ファイルに拡張子がないようですが、普通にデータベースファイルを作成すると、拡張子は通常.mdfとつきます。
VC++ Expressにある「データベースエクスプローラ」で「接続の追加」で該当のデータベースファイルを選択し、接続を追加できますか?
できたら、その接続のプロパティを確認してください。接続文字列というのがあるはずです。
この回答への補足
>>jamshid6さん
その文字列を使用しても、接続ができなかったので…
それで今、そこで躓いてしまっていて困っています。
なにか根本的なものが(構文ではなく、環境的なものが)原因で
接続ができなくなっているのでしょうか?
No.3
- 回答日時:
今使っている接続文字列は何ですか?
他の端末にあるSQL Server Expressにつなごうとしているのですか?
(ローカルのSQL Serverならば共有パイプだけでも問題ないはずですが)
#私はC++で書かないため、実は同じメッセージが出て悩んだのですが、理由は単純に「Data Source=.\SQLEXPRESS」と書いていたためで、「Data Source=.\\SQLEXPRESS」としたら通りました。
この回答への補足
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\db1;Integrated Security=True;User Instance=True");
です。
いろいろと試しているので、これはつい先ほど使用した
接続文字列です。
いつも申し訳ございません…
No.2
- 回答日時:
#1です。
誤認がありましたので、補足します。ExpressEditionのデータベースエクスプローラからは確かにデータベースファイルの接続しかサポートしていないのですが、実際にやってみるとコーディング上は特に問題なくデータベースに接続できますね。
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=localhost;Initial Catalog=(データベース名);Integrated Security=True");
失礼しました。アタッチにこだわらず試していただければと思います。
>>jamshid6さん
ありがとうございます。
今
'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました。
というエラーを直すため格闘中です。
SQL Serverのリモートホストアクセスを許可したり
セキュリティソフトで遮断してしまわないように設定したり
いろいろと手を打っているのですが、なぜかこの
エラーメッセージが出てしまいます。
(しかし、なぜか1度だけ、構文は同じにも関わらずエラーメッセージが
出ずに実行を終了できていました)
そのときのエラーログですが
'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました。
追加情報: SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした)
プログラム '[3176] aaaaa.exe: マネージ' はコード -532459699 (0xe0434f4d) で終了しました。
とありました。
何度も申し訳ございませんが、お時間のあるときに答えて下されば
幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- SQL Server SQL ServerでDBを構築。これは開発? 4 2022/05/28 14:10
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
- その他(ブラウザ) python から COBOL を呼び出すことは可能でしょうか。 1 2023/04/21 21:03
- SQL Server PCが悪くなって新しいPCにSSMSのデータを移すよう頼まれたけど移し方が分からない 1 2023/05/18 16:54
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
接続されてるユーザーを切断す...
-
MSDEって何ですか?
-
「パッシブシャットダウン」っ...
-
【DB】同じトランザクション内...
-
postgresql についてです
-
DATファイルをEXCELで開きたい
-
SQL*Loaderのコミットポイント...
-
期限切れのバックアップの削除
-
エクセルのフィルタ抽出が固まる
-
ACCESSのデータをWebブラウザで...
-
MS-Accessのエクスポートで異常...
-
PCが悪くなって新しいPCにSSMS...
-
1回目の実行に3分、2回目の実行...
-
復旧中のデータベースについて
-
テキストで空欄(null?)を検索...
-
Sqliteで使えない文字。
-
mdfファイルの残骸について
-
ファイルの存在チェック
-
復元時間:復元しています
-
BACKUP DATABASE とINSERTが同...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルへのアクセスでエラー...
-
接続されてるユーザーを切断す...
-
VC++でSQL Serverに接続するには
-
「パッシブシャットダウン」っ...
-
iTuneでCDをインポートする時に...
-
作成したDBを使いたい
-
データベースで
-
MSDEって何ですか?
-
ADOでエクセルからSQL Serverへ...
-
IEとAccessの連携をするには…?
-
SQL Server 2008 Express
-
SQL Serverの接続方法を教えて...
-
DBアクセス簡易ツールを教えて...
-
SQL Server のテーブルについて
-
SQL server認証に必要な最低限...
-
データベース(MySQL,PostgreSQ...
-
phpとデータベース
-
【DB】同じトランザクション内...
-
警察はスマホに保存した動画や...
-
postgresql についてです
おすすめ情報