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

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

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

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

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

解決済

readlineとdrawstringの所で例外を意図的に発生させたい

hinatti
hinatti

総合スコア0

C#

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

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです

2回答

0評価

0クリップ

17閲覧

投稿2017/09/15 06:35

編集2022/01/12 10:58

###前提・実現したいこと
作成したプログラムのテストをしているのですがreadLineとdrawstringの所で意図的に例外を発生させたい

###該当のソースコード

C#

/// <summary> /// FormProductDisplayのイベントハンドラ /// DBに接続して任意のファイルをINSERTする /// </summary> /// <param name="sender">使用しない</param> /// <param name="e">使用しない</param> private void FormProductDisplay_Load\(object sender, EventArgs e\) { string sqlDelete = @"DELETE FROM product_table"; using \(SqlConnection connection = new SqlConnection\(Properties\.Settings\.Default\.ConnectionString\)\) using \(SqlCommand command = new SqlCommand\(sqlDelete, connection\)\) { try { connection\.Open\(\); } catch \(Exception ex\) { MessageBox\.Show\("データベースを開くのに失敗しました。", "error", MessageBoxButtons\.OK, MessageBoxIcon\.Error\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); return; } try { command\.ExecuteNonQuery\(\); } catch \(Exception ex\) { MessageBox\.Show\("SQL文を実行出来ませんでした。", "error", MessageBoxButtons\.OK, MessageBoxIcon\.Error\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); return; } } string filePath; using \(OpenFileDialog dialog = new OpenFileDialog\(\)\) { dialog\.FileName = "default\.txt"; dialog\.InitialDirectory = ""; dialog\.Title = "開くファイルを選択してください。"; dialog\.RestoreDirectory = true; dialog\.CheckFileExists = false; TopMost = false; if \(dialog\.ShowDialog\(\) == DialogResult\.Cancel\) { return; } filePath = dialog\.FileName; } using \(SqlConnection connection = new SqlConnection\(Properties\.Settings\.Default\.ConnectionString\)\) { string sqlInsert = @" INSERT INTO product_table \( product_id, basic_order_lot, product_code, chassis_number, assembled_ymd, assembled_hms, struct_number, yyyymm \) VALUES \( @product_id, @basic_order_lot, @product_code, @chassis_number, @assembled_ymd, @assembled_hms, @struct_number, @yyyymm \); "; try { connection\.Open\(\); } catch \(Exception ex\) { MessageBox\.Show\("データベースを開くのに失敗しました。", "error", MessageBoxButtons\.OK, MessageBoxIcon\.Error\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); return; } using \(SqlCommand command = new SqlCommand\(sqlInsert, connection\)\) { FileStream stream; try { stream = File\.Open\(filePath, FileMode\.Open\); } catch \(Exception ex\) { MessageBox\.Show\("ファイルを開くのに失敗しました。", "error", MessageBoxButtons\.OK, MessageBoxIcon\.Error\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); return; } using \(StreamReader read = new StreamReader\(stream\)\) { while \(read\.EndOfStream == false\) { string line; try { line = read\.ReadLine\(\); } catch \(Exception ex\) { MessageBox\.Show\("ファイルの読み込みに失敗しました。", "error", MessageBoxButtons\.OK, MessageBoxIcon\.Error\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); return; } if \(line == null\) { break; } command\.Parameters\.AddWithValue\("@product_id", line\.Substring\(0, 11\)\); command\.Parameters\.AddWithValue\("@basic_order_lot", line\.Substring\(11, 8\)\); command\.Parameters\.AddWithValue\("@product_code", line\.Substring\(19, 6\)\); command\.Parameters\.AddWithValue\("@chassis_number", line\.Substring\(25, 4\)\); command\.Parameters\.AddWithValue\("@assembled_ymd", line\.Substring\(29, 8\)\); command\.Parameters\.AddWithValue\("@assembled_hms", line\.Substring\(37, 11\)\); command\.Parameters\.AddWithValue\("@struct_number", line\.Substring\(48, 7\)\); command\.Parameters\.AddWithValue\("@yyyymm", line\.Substring\(55, 6\)\); try { command\.ExecuteNonQuery\(\); } catch \(Exception ex\) { MessageBox\.Show\("データの追加に失敗しました。", "Information", MessageBoxButtons\.OK, MessageBoxIcon\.Information\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); } command\.Parameters\.Clear\(\); } read\.Close\(\); } } } } \. \. \. /// <summary> /// 1ページ印刷するイベントハンドラ /// 1ページ分の印刷設定 /// </summary> /// <param name="sender">使用しない</param> /// <param name="e">使用する</param> private void PrintPage\(object sender, PrintPageEventArgs e\) { int x, y = 20; e\.HasMorePages = true; Font font = new Font\("MS ゴシック", 12\); var productList = productDataBindingSource\.DataSource as List<ProductData>; if \(productList == null\) { e\.HasMorePages = false; return; } for \(int i = \(\(page - 1\) \* 50\); \(i < productList\.Count && \(i < \(page \* 50\)\)\); i\+\+\) { ProductData data = productList\[i\]; try { if \(data == null\) { return; } x = 30; e\.Graphics\.DrawString\(data\.ProductId, font, Brushes\.Black, x, y\); x = x \+ 80; e\.Graphics\.DrawString\(data\.BasicOrderLot, font, Brushes\.Black, x, y\); x = x \+ 90; e\.Graphics\.DrawString\(data\.ProductCode, font, Brushes\.Black, x, y\); x = x \+ 80; e\.Graphics\.DrawString\(data\.ChassisNumber, font, Brushes\.Black, x, y\); x = x \+ 60; e\.Graphics\.DrawString\(data\.AssembledYmd, font, Brushes\.Black, x, y\); x = x \+ 150; e\.Graphics\.DrawString\(data\.AssembledHms, font, Brushes\.Black, x, y\); x = x \+ 100; e\.Graphics\.DrawString\(data\.StructNumber, font, Brushes\.Black, x, y\); x = x \+ 100; e\.Graphics\.DrawString\(data\.YyyyMm, font, Brushes\.Black, x, y\); y = y \+ 20; } catch \(Exception ex\) { MessageBox\.Show\("描画出来ませんでした。", "Information", MessageBoxButtons\.OK, MessageBoxIcon\.Information\); System\.Diagnostics\.Debug\.WriteLine\(ex\.ToString\(\)\); e\.HasMorePages = false; } } e\.Graphics\.DrawString\(String\.Format\("{0}ページ", page\), font, Brushes\.Black, 365, 1110\); page\+\+; if \(productList\.Count <= \(page - 1\) \* 50\) { e\.HasMorePages = false; page = 1; return; } }

###試したこと
開いたファイルを消したら読み込みができないんじゃないかと思い実践しようと思ったのですが他のプログラムで開いていたら消去が出来なかったです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Visual Studio 2012

Microsoft Visual Studio 2012は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2010の次のバージョンです