• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++でSQLへSELECT文を送ったのですが…)

VC++でSQLへSELECT文を送り、エラーが発生した

このQ&Aのポイント
  • VC++でSQLへSELECT文を送りたいが、エラーが発生した。エラーメッセージは'ExecuteReader'が定義されていない識別子であり、printfの引数の型が一致しないというもの。
  • 開発環境はOSはXPのHomeEdition、Visual C++ ExpressEdition、SQL Server 2005 Express。
  • エラーを解決できる方法を教えて欲しい。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ごめんなさい ・・・ SqlCommandにExecuteはありませんね SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); ですね subの呼び出しを sub( exeReader ); とします 関数sub側は void sub( SqlDataReader ^objRd ) {   // DBより取得したレコードを取得する   while( objRd->Read() ) {     Console::Writeln( L"{0}", objRd[0] );   } } といった具合にします C++/CLIでは printfより Console::WriteやWiltelnのほうが親和性がいいでしょう

yamatonbo
質問者

お礼

お返事ありがとうございます。 了解しました、さっそくやってみますね。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

関数subで ExecuteReaderを使いたいなら 引数に持たせるかグローバル変数にしましょう void sub( SqlDataReader^ objRd ) といった具合です SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);// SqlDataReader^ ExecuteReader (); は SqlDataReader^ exeReader = sqlCmd->Execute(); といった具合でしょう printfに関するエラーは VC++2005以降はUnicedeが標準の文字セットになっています プロジェクト > プロパティの 構成プロパティ > 全般の 文字セットを『マルチバイト文字セットを使用する』に変更するか 文字列の前に Lをつけます printf( L"表示テスト\n" ); といった具合です printf( a, L"表示テスト\n" ); は何を期待しているコードでしょう aはSqlDataReaderのオブジェクトのように思います aのデータベースから取得したデータを表示したのであれば printf( L"表示テスト %s \n", a[0] ); などといった具合です … フィールド(列)の内容により %sは適宜修正してください

yamatonbo
質問者

お礼

すみません、まだ初心者なので、よく分からないところが何点か… 今、こんな形にしたのですが #include "stdafx.h" #include <stdio.h> #include <windows.h> #include <string> using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; const wchar_t a=0; int main(void) { String^ str;//指令格納単語作成 SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\卒研\\test.mdf;Integrated Security=True;User Instance=True"); //↑接続先指定 sqlConn->Open();//サーバOPEN str = "Select test FROM Table1";//指令格納 SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);// SqlDataReader^ exeReader = sqlCmd->Execute(); sqlConn->Close(); } void sub(SqlDataReader^ objRd) { a = ExecuteReader; printf( L"test\n",a ); return; } この構文でチャレンジしてみたところ 1>select-test.cpp 1>.\select-test.cpp(20) : error C2039: 'Execute' : 'System::Data::SqlClient::SqlCommand' のメンバではありません。 1> c:\windows\microsoft.net\framework\v2.0.50727\system.data.dll : 'System::Data::SqlClient::SqlCommand' の宣言を確認してください。 1>.\select-test.cpp(26) : error C2065: 'ExecuteReader' : 定義されていない識別子です。 1>.\select-test.cpp(27) : error C2664: 'printf' : 1 番目の引数を 'const wchar_t [6]' から 'const char *' に変換できません。(新しい 機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは 関数スタイルのキャストが必要です。 と返されてしまいました。 あと、Executeについて調べると、ADOというものを見たのですが… access、というのでしょうか。 私のパソコンには入っていないので、初心者の偏見かもしれませんが どうやら使えない?のかな…と心配になっています…

関連するQ&A

専門家に質問してみよう