C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: C# C++ ?


(過去ログ 112 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■66239 / inTopicNo.1)  C# C++ ?
  
□投稿者/ どっとくりあ (1回)-(2013/04/10(Wed) 17:14:48)

分類:[.NET 全般] 

大変初歩的な質問、また調べないんかい。と言われそうな質問で恐縮です。
Visual Basic 2005は多少出来ますが、Cは全くわかりません。
以下のCのコードをネットから頂きました。Visual Basic 2005に直そうかと思ってるのですが、まずは希望通りの動作をするのか確認してからと思い、Visual Studio 2005にかけようとしました。
C++とC#のどちらにも同じ事をしてみたのですが、エラーの嵐で全くわかりませんのでお聞きします。
C++とC#をそれぞれ起動して、新しいプロジェクトを作ってフォームを造りボタンを一つおいたところで、
private void button1_Click(object sender, EventArgs e)
{

}
上記のコードに、下のコードを上書きすればそれで動作すると思い込んでいるのですが、C++とC#のどちらもエラーの嵐です。
何か基本的に間違っているでしょうか。

private void button1_Click(object sender, EventArgs e)
{
//using System.Data.Odbc;

string csvDir = @"d:\temp";
string csvFileName = "Text1.csv";
string csvFileName2 = "Text2.csv";

//ODBC接続文字列を組み立てる
OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();
builder["Driver"] = "Microsoft Text Driver (*.txt; *.csv)";
builder["dbq"] = csvDir;
builder["Extension"] = "text;HDR=No;FMT=Delimited\"";

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();

using (OdbcConnection con = new OdbcConnection(builder.ConnectionString))
{
con.Open();
string strSQL = "SELECT T1.* FROM (" + csvFileName + " T1 INNER JOIN " + csvFileName2 + " T2 ON T1.F1=T2.F1)";

using (OdbcCommand cmd = new OdbcCommand(strSQL, con))
using (OdbcDataReader rd = cmd.ExecuteReader())
{
StringBuilder sb = new StringBuilder();
//カラム名を取得し、カンマ区切りで編集します
for (int col = 0; col < rd.FieldCount; col++)
{
sb.Append(rd.GetName(col)).Append(",");
}
sb.Remove(sb.Length - 1, 1);
System.Diagnostics.Debug.WriteLine(sb);

//データを取得しカンマ区切りで編集します
while (rd.Read())
{
sb.Length = 0;
for (int col = 0; col < rd.FieldCount; col++)
{
sb.Append(rd.GetValue(col)).Append(",");
}
sb.Remove(sb.Length - 1, 1);
System.Diagnostics.Debug.WriteLine(sb);
}
}
}
sw.Stop();
label1.Text = String.Format("完了{0:#,##0}ms", sw.ElapsedMilliseconds);
}
引用返信 編集キー/
■66240 / inTopicNo.2)  Re[1]: C# C++ ?
□投稿者/ しま (4回)-(2013/04/10(Wed) 17:36:56)
No66239 (どっとくりあ さん) に返信
> 大変初歩的な質問、また調べないんかい。と言われそうな質問で恐縮です。
> Visual Basic 2005は多少出来ますが、Cは全くわかりません。
> 以下のCのコードをネットから頂きました。Visual Basic 2005に直そうかと思ってるのですが、まずは希望通りの動作をするのか確認してからと思い、Visual Studio 2005にかけようとしました。

あなたが提示されたコードは C のコードではありません。
using や System.Debug や string(String の誤り?) や String.Format() などがあるところから推測すると C# のようです。

また、どの行にどのようなエラーが出ているのかわからないのでこれ以上の返事はかけません。
引用返信 編集キー/
■66242 / inTopicNo.3)  Re[1]: C# C++ ?
□投稿者/ howling (349回)-(2013/04/10(Wed) 18:26:50)
No66239 (どっとくりあ さん) に返信

こんばんわ。

しまさんのおっしゃる通り、C#のコードに見えますね。
エラー自体が書かれていないので何とも…というのは同じ話なのですが、
かといって全部どばっと書いても意味がわからなくなってしまうでしょう。

そこで、今全部一気にコピペしていると思うのですが、
上から順々にペーストしてはコンパイルを通して…とやってみてはいかがでしょうか?

そのコードが正しく動作する物だった場合、エラーが出る一番の原因として私が考えたのは参照忘れです。
例えばOdbcConnectionStringBuilderというクラスを使用していますが、
これは名前空間を含めると、正式にはSystem.Data.Odbc.OdbcConnectionStringBuilderとなります。
これをSystem.Data.Odbc.OdbcConnectionStringBuilderと書けば問題なく通ると思いますが、
ただOdbcConnectionStringBuilderとだけ書いてしまうとコンパイラが何だかわからなくなってしまい、エラーとなります。

これを回避する簡単なやり方として、コメントアウトしているusing System.Data.Odbc;が使われるわけです。
このusing 〜;というのは、全て利用するソースファイルの一番上の方でやった方が良いでしょう。
要はこの名前空間を使用します、というだけの話ですから、上で書いた通り、省略されている部分も書けばこれをやる必要自体はありません。
(その場合コーディングする量が増えるのであまりおすすめしませんが)

このような事を、上から順々に
コピペしてコンパイル→エラーが出た→リファレンスで名前空間を調べて参照を付け足す→コンパイル→通った
とやっていけば、通る物になるのではないか?と思います。

ただ、もちろんこれはコピペするソースコードが問題無く動作する物だった場合のみです。
動作しない場合はエラーとなりますから、そこでまた調べてみて、わからなかったらここに書くと良いかもしれません。

# それから、私も忘れがちですが、ソースコードを貼る場合は図表モードで投稿すると、タブなどのスペースが空いたまま出て見やすいです。
# 次から利用することをおすすめしておきます。
引用返信 編集キー/
■66249 / inTopicNo.4)  Re[2]: C# C++ ?
□投稿者/ 太郎冠者 (2回)-(2013/04/10(Wed) 23:38:02)
コメントアウトされている以下の行をFormクラスファイルの先頭に置いたらほとんどのエラーは消えるような気がします。
もちろんコメントアウトは解除して。
//using System.Data.Odbc;

[参考]
using ディレクティブ (C# リファレンス)
http://msdn.microsoft.com/ja-jp/library/sf0df423(v=vs.80).aspx


他には、ボタンの他にラベルも一つ必要ですね。
一番下の行で使用しているようです。
label1.Text = String.Format("完了{0:#,##0}ms", sw.ElapsedMilliseconds);
引用返信 編集キー/
■66251 / inTopicNo.5)  Re[3]: C# C++ ?
□投稿者/ どっとくりあ (2回)-(2013/04/11(Thu) 08:14:37)
しまさん、howlingさん、太郎冠者さん 
この様ないい加減な質問にご回答頂き大変感謝致します。
using System.Data.Odbc; これを先頭に置きましたらいっきにエラーゼロとなりました。いろいろご回答頂いたのになんか申し訳ないです。
実行するとエラーしますが、また調べて別に質問するかも知れませんので、宜しくお願い致します。
余計な事ですが、
この質問をする前に、実はわけもわからず、Basicに変換を試みました。なんとビルドまで通りました。で動かないので、元のCのコードでほんとに動くのを確かめるべきでしょう。となったわけです。
ビルドが通ったのは奇跡だと思ったのですがそうじゃないんですね。Visual Studioのエラーチェックがすごいのですね。
解決済み
引用返信 編集キー/
■66252 / inTopicNo.6)  Re[4]: C# C++ ?
□投稿者/ 裕猫 (51回)-(2013/04/11(Thu) 08:31:08)
No66251 (どっとくりあ さん) に返信
> しまさん、howlingさん、太郎冠者さん 
> この様ないい加減な質問にご回答頂き大変感謝致します。
> using System.Data.Odbc; これを先頭に置きましたらいっきにエラーゼロとなりました。いろいろご回答頂いたのになんか申し訳ないです。
> 実行するとエラーしますが、また調べて別に質問するかも知れませんので、宜しくお願い致します。
> 余計な事ですが、
> この質問をする前に、実はわけもわからず、Basicに変換を試みました。なんとビルドまで通りました。で動かないので、元のCのコードでほんとに動くのを確かめるべきでしょう。となったわけです。
> ビルドが通ったのは奇跡だと思ったのですがそうじゃないんですね。Visual Studioのエラーチェックがすごいのですね。

余計なことかもしれませんが
//using System.Data.Odbc;
using (OdbcConnection con = new OdbcConnection(builder.ConnectionString))
があることよりデータベースにアクセスするプログラムです。アクセスするデータベースがないと動いていても何も起きません。データベースはありますか?動かない原因の一つとして確認してください。
解決済み
引用返信 編集キー/
■66273 / inTopicNo.7)  Re[5]: C# C++ ?
□投稿者/ どっとくりあ (3回)-(2013/04/12(Fri) 11:33:17)
一応解決にしてしまいましたが、まだ書き込める様ですので、書かせて頂きます。
タイトルとは違って来ますが。
内容も、どうもSQLの話になりそうな予感がして、なんか申し訳無いです。

そもそも、やりたいのは、CSVファイル同士でのSQL的な結合
と言う事で、以下を参考にしました。
http://genz0.blogspot.jp/2009/11/netcsvoledb3.html
CSVファイルを二つ用意して、カラムを指定して、(指定しなくても左固定でも可)
そのカラムの内容を照合して二つのCSVファイルを結合したい。

データベースといいますか、以下のCSVファイルを用意して
動作テストをしています。

D:\Text1.csv

T1,T1-1,T1-2
1,text101,text111
2,text102,text112
3,text103,text113
4,text104,text114
5,text105,text115

D:\Text2.csv

T2,T2-1,T2-2
1,text201,text211
2,text202,text212
3,text203,text213
4,text204,text214
5,text205,text215


using (OdbcDataReader rd = cmd.ExecuteReader())

ここで、以下のエラーが出力されます。
ERROR [07002] [Microsoft][ODBC Text Driver] パラメータが少なすぎます。2 を指定してください。

どうも using (OdbcCommand cmd = new OdbcCommand(strSQL, con))
の部分を通過しているので、OdbcDataReader部分というのは、そのSQLの結果がおかしい
と言う事でしょうか。

string strSQL = "SELECT ・・・・
の部分のSELECTを少し調べましたが、通常のSQL文とは違うのか理解出来ませんでした。
ここが違うと言う事は、コードが正しいとするなら、CSVファイルの内容自体がおかしい
のかも知れないとか想像はするのですが、わかりません。

引用返信 編集キー/
■66275 / inTopicNo.8)  Re[6]: C# C++ ?
□投稿者/ ムーミン (1回)-(2013/04/12(Fri) 12:41:04)
新しい質問ですので、出来れば新しいスレッドを立てた方がいいと思います。
タイトルにC#やC++といった記述があるのに、実はSQLの話題だったとなると、
タイトルを見てここを訪れた人は混乱します。

さて、strSQLの中身はどうなっていますか?
例文だと

> string strSQL = "SELECT T1.* FROM (" + csvFileName + " T1 INNER JOIN " + csvFileName2 + " T2 ON T1.F1=T2.F1)";

とありますが、提示のcsvファイルにはF1という項目が見当たりません。
(もっとも、これが原因ではないのかも知れませんが。)
引用返信 編集キー/
■66277 / inTopicNo.9)  Re[7]: C# C++ ?
□投稿者/ どっとくりあ (4回)-(2013/04/12(Fri) 14:35:28)
No66275 (ムーミン さん) に返信
すみません、ご指摘頂き再度調べましたらわかりました。
SQL文が初めてのもので、わけわからず、お聞きしてしまいました。
一応動きましたが、参考とお礼かたがた載せた方が良いと思いますので、新しいスレッドとします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -