アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <string>
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
char a;

int main(void)
{
String^ str;
SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\○○\\test.mdf;Integrated Security=True;User Instance=True");
sqlConn->Open();
str = "Select test FROM Table1";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);//
SqlDataReader^ ExecuteReader ();
sqlConn->Close();
}

int sub()
{
a = ExecuteReader;
printf (a,"表示テスト\n");
return 0;
}

の構文でSQL ServerへSELECT文を送り、そこで得た結果を
表示しようと思ったのですが

1>select-test.cpp
1>.\select-test.cpp(28) : error C2065: 'ExecuteReader' :
定義されていない識別子です。
1>.\select-test.cpp(29) : error C2664: 'printf' : 1 番目の引数を
'char' から 'const char *' に変換できません。
(新しい機能 ; ヘルプを参照)
1> 整数型からポインタ型への変換には
reinterpret_cast、C スタイル キャストまたは
関数スタイル キャストが必要です。


と2つのエラーを返されてしまいました。

開発環境は
OS XPのHomeEditon
Visual C++ ExpressEdition
SQL Server 2005 Express
です。
よろしくお願いします。

A 回答 (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のほうが親和性がいいでしょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/12 09:29

関数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は適宜修正してください
    • good
    • 0
この回答へのお礼

すみません、まだ初心者なので、よく分からないところが何点か…

今、こんな形にしたのですが

#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、というのでしょうか。
私のパソコンには入っていないので、初心者の偏見かもしれませんが
どうやら使えない?のかな…と心配になっています…

お礼日時:2008/11/09 20:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!