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

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

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

Re[2]: 例外処理


(過去ログ 62 を表示中)

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

■36058 / inTopicNo.1)  例外処理
  
□投稿者/ のぶ (1回)-(2009/05/19(Tue) 13:49:08)

分類:[.NET 全般] 

try
{ // 登録
ta.Registration( )
        args.IsValid = true;
}
//会員情報データベースへの登録失敗の場合(会員IDが重複)
catch (System.Data.SqlClient.SqlException)
{

args.IsValid= false;
}

一意制約で例外が発生した場合現在System.Data.SqlClient.SqlExceptionで拾っているのですがほかにいい広い方はありますか?
引用返信 編集キー/
■36059 / inTopicNo.2)  Re[1]: 例外処理
□投稿者/ みきぬ (433回)-(2009/05/19(Tue) 13:57:08)
Insert する前に、登録に使う会員IDを条件にして Select をおこなう。
結果が1件あれば、会員IDが重複するので登録できないことがわかる。

それはそれとして、args.IsValid = true; とか書いているのが微妙に気になる。
引用返信 編集キー/
■36065 / inTopicNo.3)  Re[1]: 例外処理
□投稿者/ ぱぱいやん (24回)-(2009/05/19(Tue) 16:57:38)
ぱぱいやん さんの Web サイト
No36058 (のぶ さん) に返信
> 一意制約で例外が発生した場合現在System.Data.SqlClient.SqlExceptionで拾っているのですがほかにいい広い方はありますか?

存在チェックしてなければ挿入する方法が良いですよね。
しかし、マルチユーザー環境だと存在チェックと挿入が 1 セッションで行われないと間に誰かが挿入してしまうかもしれないから要注意です。
引用返信 編集キー/
■36074 / inTopicNo.4)  Re[1]: 例外処理
□投稿者/ s2n (1回)-(2009/05/19(Tue) 22:11:27)
No36058 (のぶ さん) に返信
> try
> { // 登録
> ta.Registration( )
>         args.IsValid = true;
> }
> //会員情報データベースへの登録失敗の場合(会員IDが重複)
> catch (System.Data.SqlClient.SqlException)
> {
>
> args.IsValid= false;
> }
>
> 一意制約で例外が発生した場合現在System.Data.SqlClient.SqlExceptionで拾っているのですがほかにいい広い方はありますか?

一意制約のチェック(会員IDが重複)は、あらかじめSelect句で存在チェックする実装が無難ですね。
また、この実装の場合だとSqlExceptionだけで判定していますので、
その他のSQL Serverのエラーや警告でも例外としてcatchしてしまいます。
一概にID重複の判断とできないと思いますので注意してくださいね。
#SQL Serverは詳しくないので以下のURLを参考にしました。(MSDN)
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlexception(VS.80).aspx
引用返信 編集キー/
■36085 / inTopicNo.5)  Re[2]: 例外処理
□投稿者/ のぶ (2回)-(2009/05/20(Wed) 11:44:34)
みなさんありがとうございました!
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -