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

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

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

Re[2]: SQLServerのデータをCSV出力


(過去ログ 170 を表示中)

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

■97834 / inTopicNo.1)  SQLServerのデータをCSV出力
  
□投稿者/ 初学者 (1回)-(2021/07/26(Mon) 14:51:32)

分類:[.NET 全般] 

環境:visualstudio2019/SQLServer2019/

データベースに登録されているテーブルをボタンを押すことで、ネットワーク上のフォルダにCSVファイルを保存したいです。

private void buttonCSV_Click(object sender, EventArgs e)
{   }

カッコ内の記述を教えていただきたいです。
質問が漠然としていること理解しています。。申し訳ございません。





引用返信 編集キー/
■97835 / inTopicNo.2)  Re[1]: SQLServerのデータをCSV出力
□投稿者/ WebSurfer (2299回)-(2021/07/26(Mon) 15:18:56)
No97834 (初学者 さん) に返信

> カッコ内の記述を教えていただきたいです。
> 質問が漠然としていること理解しています。。申し訳ございません。

漠然ならまだしも、それでは丸投げですね。

自分ではどこまでできていて、何に躓いていて、何が分かれば解決できるかを、ここに書いて
あること以外は知り得ない第三者が読んで分かるように書いてもらえると、少しはレスが付き
やすくなるかも。
引用返信 編集キー/
■97836 / inTopicNo.3)  Re[2]: SQLServerのデータをCSV出力
□投稿者/ 初学者 (2回)-(2021/07/26(Mon) 17:53:27)
No97835 (WebSurfer さん) に返信



以下のコードを考えましたが、動きませんでした。
考え方はあっているのでしょうか。




private void button1_Click(object sender, EventArgs e)
{

string strConn = @"Data Source=MOUSE\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
using (System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(strConn))
{
sqlConn.Open();

string sbSQL = @"SELECT ID,NAME FROM Table1";
using (System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand(sbSQL, sqlConn))
{
using (System.Data.SqlClient.SqlDataReader sqlReader = sqlCommand.ExecuteReader())
{

if (sqlReader.HasRows == true)
{

using (System.IO.StreamWriter wFileWriter = new System.IO.StreamWriter(@"C:\test.csv", false, System.Text.Encoding.GetEncoding("shift_jis")))
{

while (sqlReader.Read())
{

wFileWriter.WriteLine(string.Format("{0},{1}", sqlReader["ID"], sqlReader["NAME"]));
}
wFileWriter.Close();
}
}
sqlReader.Close();
}
}
sqlConn.Close();
}
}
引用返信 編集キー/
■97837 / inTopicNo.4)  Re[3]: SQLServerのデータをCSV出力
□投稿者/ WebSurfer (2300回)-(2021/07/26(Mon) 18:21:17)
No97836 (初学者 さん) に返信

> 以下のコードを考えましたが、動きませんでした。

「動きませんでした」と言うだけでは第三者には動かなかったことしか分かりません。

具体的にどういう結果になったか、どこが期待と違ったかを書きましょう。


> 考え方はあっているのでしょうか。

SqlDataReader で読んでくるというのは考え方としては間違ってはいないし、結果が
期待通り取れていればあっていると言っても良いと思います。・・・が、期待した結果
にならないんですよね。

やり方を変えて、SqlDataAdapter を使って SQL Server のレコードを DataTable に
取得し、DataTable から CSV ファイルを生成することを考えてはいかがですか?

そのやり方は、ググればネットに多々あります。

引用返信 編集キー/
■97838 / inTopicNo.5)  Re[3]: SQLServerのデータをCSV出力
□投稿者/ furu (122回)-(2021/07/26(Mon) 19:03:42)
No97836 (初学者 さん) に返信
> 以下のコードを考えましたが、動きませんでした。
> 考え方はあっているのでしょうか。
動きそう。

WebSurferさんが書かれているように
あなたの「動きませんでした」がどういうことなのか
教えてもらわないとわかりません。

・ビルドでエラー
・プログラムが例外で落ちる
・プログラムが終わらない
・ファイルが作成されない
・ファイルの中身が期待通りでない
引用返信 編集キー/
■97840 / inTopicNo.6)  Re[3]: SQLServerのデータをCSV出力
□投稿者/ shu (1260回)-(2021/07/27(Tue) 09:05:50)
No97836 (初学者 さん) に返信

> string strConn = @"Data Source=MOUSE\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
Initial Catalog=masterで
masterにアクセスを行うようになっているが


> string sbSQL = @"SELECT ID,NAME FROM Table1";
master上にありえないTable1を読もうとしている。

のでこれは無理です。
引用返信 編集キー/
■97841 / inTopicNo.7)  Re[4]: SQLServerのデータをCSV出力
□投稿者/ WebSurfer (2301回)-(2021/07/27(Tue) 09:53:25)
問題の本質とは関係ない話ですが、Initial Catalog の設定について一言・・・

Initial Catalog=master 試したことがないので分かりませんが、Initial Catalog の設定は必ずしも
必要という訳ではなさそうです。

例えば NORTHWIND と PUB が SQL Server のインスタンスにアタッチされて使える状態になっている
場合、Initial Catalog=NORTHWIND となっていても、Initial Catalog の指定なしでも SELECT クエ
リで FROM [PUBS].[dbo].[xxxxx] と PUB を指定していれば PUB から取得できます。

興味がありましたら以下の記事を見てください。

接続文字列でのデータベース名の指定
http://surferonwww.info/BlogEngine/post/2014/05/30/initial-catalog-keyword-in-sqlclient-connection-string.aspx


引用返信 編集キー/
■97842 / inTopicNo.8)  Re[4]: SQLServerのデータをCSV出力
□投稿者/ 大谷刑部 (142回)-(2021/07/27(Tue) 10:44:13)
No97840 (shu さん) に返信
> ■No97836 (初学者 さん) に返信
>
>>string strConn = @"Data Source=MOUSE\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
> Initial Catalog=masterで
> masterにアクセスを行うようになっているが
>
>
>>string sbSQL = @"SELECT ID,NAME FROM Table1";
> master上にありえないTable1を読もうとしている。
>
> のでこれは無理です。

権限付与されてれば「master」にもTable1は作れてしまうので、質問者さんがどこのデータベースにTable1を作ったかによるんでは?
引用返信 編集キー/
■97843 / inTopicNo.9)  Re[1]: SQLServerのデータをCSV出力
□投稿者/ 大谷刑部 (143回)-(2021/07/27(Tue) 11:28:17)
No97834 (初学者 さん) に返信
> 環境:visualstudio2019/SQLServer2019/
>
> データベースに登録されているテーブルをボタンを押すことで、ネットワーク上のフォルダにCSVファイルを保存したいです。
>

原始的やり方ですがbcpコマンドで出力するのを検討してみてもいいのでは?

↓参考
https://qiita.com/c-nuts/items/afa493f9dba00cc96a7a

> private void buttonCSV_Click(object sender, EventArgs e)
> {   }

C#の画面から実行したいのであれば、bcpを実行するストアドをADO.netのSqlCommandオブジェクトで
CommandTypeプロパティーをストアドにして、
SQL文を実行する代わりにストアドを実行するようにすればよいだけです。

引用返信 編集キー/
■97844 / inTopicNo.10)  Re[2]: SQLServerのデータをCSV出力
□投稿者/ WebSurfer (2302回)-(2021/07/27(Tue) 13:02:21)
No97843 (大谷刑部 さん) に返信

> C#の画面から実行したいのであれば、bcpを実行するストアドをADO.netのSqlCommandオブジェクトで
> CommandTypeプロパティーをストアドにして、
> SQL文を実行する代わりにストアドを実行するようにすればよいだけです。

ストアドで「ネットワーク上のフォルダにCSVファイルを保存」はどうするのかな?
引用返信 編集キー/
■97845 / inTopicNo.11)  Re[5]: SQLServerのデータをCSV出力
□投稿者/ shu (1261回)-(2021/07/27(Tue) 13:18:12)
No97842 (大谷刑部 さん) に返信
> ■No97840 (shu さん) に返信
>>■No97836 (初学者 さん) に返信
>>
> >>string strConn = @"Data Source=MOUSE\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
>>Initial Catalog=masterで
>>masterにアクセスを行うようになっているが
>>
>>
> >>string sbSQL = @"SELECT ID,NAME FROM Table1";
>>master上にありえないTable1を読もうとしている。
>>
>>のでこれは無理です。
>
> 権限付与されてれば「master」にもTable1は作れてしまうので、質問者さんがどこのデータベースにTable1を作ったかによるんでは?
あくまで間違いのありそうな箇所をぱっと見で示しただけです。
実行できないというのだからどこかが間違っているのだと思います。


引用返信 編集キー/
■97851 / inTopicNo.12)  Re[3]: SQLServerのデータをCSV出力
□投稿者/ PATIO (10回)-(2021/07/28(Wed) 17:27:33)
No97836 (初学者 さん) に返信
> ■No97835 (WebSurfer さん) に返信
>
>
>
> 以下のコードを考えましたが、動きませんでした。
> 考え方はあっているのでしょうか。
>
>
>
>
> private void button1_Click(object sender, EventArgs e)
> {
>
> string strConn = @"Data Source=MOUSE\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
> using (System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(strConn))
> {
> sqlConn.Open();
>
> string sbSQL = @"SELECT ID,NAME FROM Table1";
> using (System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand(sbSQL, sqlConn))
> {
> using (System.Data.SqlClient.SqlDataReader sqlReader = sqlCommand.ExecuteReader())
> {
>
> if (sqlReader.HasRows == true)
> {
>
> using (System.IO.StreamWriter wFileWriter = new System.IO.StreamWriter(@"C:\test.csv", false, System.Text.Encoding.GetEncoding("shift_jis")))
> {
>
> while (sqlReader.Read())
> {
>
> wFileWriter.WriteLine(string.Format("{0},{1}", sqlReader["ID"], sqlReader["NAME"]));
> }
> wFileWriter.Close();
> }
> }
> sqlReader.Close();
> }
> }
> sqlConn.Close();
> }
> }

とりあえず、デバッガで追いかけてみましたか?
自分が書いたコードがどう動いているかを把握するのがまず第一歩だと思います。
デバッガという便利な物があるのですから、しっかり利用しましょう。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -