質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1695閲覧

C# DBのデータを全てエクセルへ出力できない

siiiii

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/09/04 04:44

編集2019/09/04 04:59

前提・実現したいこと

C#でwindowsアプリを作成しています。
DBから読んだデータを全てエクセルに出力したいのですが、
DBの一番新しいデータしか出力できません。
解決方法ご教授いただけますでしょうか。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

public void excel_OutPutEx() { String date = ""; String ginkou = ""; String kouza = ""; String kinn = ""; String bank = Form1obj.textBoxBank.Text.Trim(); String number = Form1obj.textBoxNumber.Text.Trim(); SqlConnection con1 = null; string constr = @"Data Source=pc2\sqlexpress;Initial Catalog=A;Connect Timeout=60;Persist Security Info=True;User ID=;Password=;MultipleActiveResultSets=True"; con1 = new SqlConnection(constr); con1.Open(); //Excelオブジェクトの初期化 Excel.Application ExcelApp = null; Excel.Workbooks wbs = null; Excel.Workbook wb = null; Excel.Sheets shs = null; Excel.Worksheet ws = null; try { //Excelシートのインスタンスを作る ExcelApp = new Excel.Application(); wbs = ExcelApp.Workbooks; wb = wbs.Add(); shs = wb.Sheets; ws = shs[1]; ws.Select(Type.Missing); ExcelApp.Visible = false; // エクセルファイルにデータをセットする //for ( int i = 1; i < 10; i++ ) //{ string sqlstr5 = "select date,kin from log_2 where bank = @bank and number = @number order by date ASC"; SqlCommand com5 = new SqlCommand(sqlstr5, con1); SqlParameter param5 = com5.CreateParameter(); param5 = com5.CreateParameter(); param5.ParameterName = "@bank"; param5.Value = bank; com5.Parameters.Add(param5); param5 = com5.CreateParameter(); param5.ParameterName = "@number"; param5.Value = number; com5.Parameters.Add(param5); SqlDataReader sdr5 = com5.ExecuteReader(); Excel.Range w_rgn = null; Excel.Range rgn = null; try { while (sdr5.Read()) { for (int i = 1; i < 20; i++) { w_rgn = ws.Cells; rgn = w_rgn[i,1]; //DBからデータを取得しエクセルへ出力 rgn.Value2 = sdr5.GetValue(0).ToString(); //kinn = sdr5.GetValue(1).ToString(); } } } finally { Marshal.ReleaseComObject(w_rgn); Marshal.ReleaseComObject(rgn); w_rgn = null; rgn = null; } //excelファイルの保存 wb.SaveAs(@"C:\logtest3.xlsx"); wb.Close(false); ExcelApp.Quit(); } finally { Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(shs); //Marshal.RelesaeComObject(wb); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(ExcelApp); ws = null; shs = null; wb = null; wbs = null; ExcelApp = null; GC.Collect(); } }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

VisualStudio2013
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/04 04:56

コードは ``` と ``` で囲ってください。インデントされて見やすくなりますので。(注: ``` はバッククォート 3 つです) インデントされてないコードは質問者さん自身も見る気がしないのでは? 閲覧者・回答者はなおさらです。
Zuishin

2019/09/04 05:06

削除済みや変更済みの履歴データを出力したいということですか?
siiiii

2019/09/04 05:09 編集

履歴データを出力したいです。 テーブル内のデータを全て出力できれば良いのですが、、
Zuishin

2019/09/04 05:12

つまり、データベースにあるデータを保存し、次にそのデータを変更した場合、変更する前のデータとした後のデータの両方がほしいということですか?
siiiii

2019/09/04 05:31

保存してあるデータをすべて出力したいです。
Zuishin

2019/09/04 05:41 編集

Y.H. さんの回答で質問の意図がわかりました。
siiiii

2019/09/04 05:54

伝わりづらく大変申し訳ございませんでした、ご指摘ありがとうございます。
Zuishin

2019/09/04 06:05

指摘はなにもしていません。「新しい」が何を指すかわからなかったので尋ねただけです。次回の質問では「期待する出力」と「実際の出力」を記載すると誤解を招きにくいかと思います。
guest

回答1

0

ベストアンサー

常に1行目に上書きしているからでは?rgn = w_rgn[i,1]

for (int i = 1; i < 20; i++) { w_rgn = ws.Cells; rgn = w_rgn[i,1]; // ← ★ここ //DBからデータを取得しエクセルへ出力 rgn.Value2 = sdr5.GetValue(0).ToString(); }

投稿2019/09/04 05:11

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siiiii

2019/09/04 05:31

ありがとうございます。 うまく1行ずつに出力したいのですがうまくいきません、、
Y.H.

2019/09/04 05:36

今のコードだと、常に1行目を指定しているので、selectの結果が5行でも1万行でも1行目に上書きを繰り返し、処理の結果として1行目にselectの結果の最後のものが残ります。 これはわかりますよね? 出力する行のカウンタ変数(仮にoutRowとして)を設けて、1行出力する処理が終わった時点でカウントアップしてw_rgn[i,outRow]と出力する行に指定してやればいいです。
siiiii

2019/09/04 05:53

1行目に上書きされてしまうことは理解できました。 試してみたのですが、System.Runtime.InteropServices.COMExceptionという例外が発生してしまいました、、
Y.H.

2019/09/04 06:06

> 試してみたのですが ここに結果だけ書かれても答えようがないので 質問を編集し、今の質問の下に以下を追記ください。 ・何が問題だと考えたか ・どう変更すると問題が解決すると考えたか ・試してみたコード ・結果 ・結果が想定していたものと異なっていた場合、何が問題になっているか
siiiii

2019/09/04 06:22

解決いたしました。ありがとうございます。 以降、質問の仕方を改めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問