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

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

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

Re[1]: C# .ToString で例外発生するケースについて


(過去ログ 170 を表示中)

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

■98165 / inTopicNo.1)  C# .ToString で例外発生するケースについて
  
□投稿者/ take (1回)-(2021/10/04(Mon) 10:31:01)

分類:[.NET 全般] 

開発環境:Visual Studio 2017、
言語:C#
データベース:SQL Server 2016 Express


Windowsフォームアプリケーションを開発しています。
データベースから取得したデータをDataTableに格納し
ToString()を使ってstring型に変換しています。

リリース環境でソフトウェアが落ちたという現象がありました。
当該のコードは、try〜catchを使った例外発生時のエラーログを残す処理がなかったため
例外発生するケースがあるのかどうかを推定しながら調査をしています。
データベースからSELECTにて選択したデータは、DataTableにて管理していますが
このDataTableの指定行・指定列の値がnull以外で例外発生するケースはあり得るでしょうか?
あり得るとしたら、どのようなケースが考えられるでしょうか?


実装例(そのまま載せられないため、一部抜粋とします)-----------------------------

DataTable dtDataTable = new DataTable();
string sql = "select * FROM XXXXX";
sql += string.Format(" WHERE {0} = '{1}'", YYYYY, strID);

using (OleDbConnection connection = new OleDbConnection(strConnectionString))
{
try
{
//SQL Server DB接続
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(sql, connection);
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
connection.Open();
//読込
adapter.Fill(dtDataTable);
}
catch (Exception ex)
{
; // ここで例外発生した場合は、エラーログに書きこむ
}
}

for (int j = 0; j < dtDataTable.Rows.Count; j++)
{
dtDataTable.Rows[j]["ID"] = nNewID.ToString();
string[] val = { dtDataTable.Rows[j]["No"].ToString(),
dtDataTable.Rows[j]["Name"].ToString()
}

// DBにアクセスする処理
}



引用返信 編集キー/
■98166 / inTopicNo.2)  Re[1]: C# .ToString で例外発生するケースについて
□投稿者/ 魔界の仮面弁士 (3188回)-(2021/10/04(Mon) 11:12:32)
No98165 (take さん) に返信
> ToString()を使ってstring型に変換しています。
> リリース環境でソフトウェアが落ちたという現象がありました。
DataTable に格納したデータが
「DBNull」や「""」であれば ToString できますが、
「null」の場合は ToString すると
NullReferenceException の例外になるでしょうね。


> dtDataTable.Rows[j]["No"].ToString(),
削除処理などによって dtDataTable.Rows[j].RowState の状態が
DataRowState.Deleted だった場合、DataRowVersion を指定せずに
インデクサで ["No"] にアクセスすれば、
DeletedRowInaccessibleException の例外になるでしょうね。


> catch (Exception ex)
例外を捉える範囲が広すぎるように見えます。
どの段階で発生した問題なのかを特定しにくくなりませんか?

この使い方だと、Connection が失敗したのか、SQL 問い合わせが失敗したのか、
DataTable のスキーマに合致しなかった故なのか、追跡しにくそうです。
(掲示板投稿のために簡略化しているだけかもしれませんが…)
引用返信 編集キー/
■98167 / inTopicNo.3)  Re[1]: C# .ToString で例外発生するケースについて
□投稿者/ WebSurfer (2354回)-(2021/10/04(Mon) 12:24:23)
No98165 (take さん) に返信

> リリース環境でソフトウェアが落ちたという現象がありました。

の原因は、

> ToString()を使ってstring型に変換しています。

のところと推定したのですよね? その根拠は何でしょう?

ログは取ってなかったそうですが、「リリース環境」の人の報告ですか? だとすると
そもそも「ToString()を使ってstring型に変換」は関係ない可能性も十二分にあるので
はないかと思うのですがいかがでしょう?
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -