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

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

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

Re[10]: 登録機能の重複不可(二重登録不可)について


(過去ログ 37 を表示中)

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

■19358 / inTopicNo.1)  登録機能の重複不可(二重登録不可)について
  
□投稿者/ F064 (14回)-(2008/05/22(Thu) 15:16:29)

分類:[.NET 全般] 

こんにちは。
悩んでいることがあるので教えて頂きたいです。

VS2005でC#を組んでいるのですが、
文字列をアクセスに登録する作業をしているFORMで二重登録を出来ないようにしたいのです。
たとえばAccessのテーブルに「ソフトウェア」と一度登録した後は、その後「ソフトウェア」と打ち込んでも
エラーメッセージをだしたいのです。

SQLのセレクト文で、
同じ文字列があったならエラーメッセージを出そうと考えました。


if ("SELECT * from テーブル名 where 列名 ='" + textBox1.Text + "'") ;
{
MessageBox.Show("列名" + textBox1.Text + "はすでに登録されています。\n\n", "文字列追加", MessageBoxButtons.OK, MessageBoxIcon.Stop);

textBox1.Focus();
return;
        }


以上を、打ってみたのですが、型'string'を型'bool'に暗黙的に変換できません
と怒られてしまいました。
SQLの書き方が悪いのでしょうか?入門サイトを見ながら組んだのですが、いまいちちゃんと出来ているか心配なのですが…。
それともそのほかに何か原因があるのでしょうか?

調べてみてもよく分かりませんでした。
教えてください…。
引用返信 編集キー/
■19359 / inTopicNo.2)  Re[1]: 登録機能の重複不可(二重登録不可)について
□投稿者/ επιστημη (1039回)-(2008/05/22(Thu) 15:24:48)
επιστημη さんの Web サイト
> if ("SELECT * from テーブル名 where 列名 ='" + textBox1.Text + "'") ;

ダメダメです。
"SELECT * from テーブル名 where 列名 ='なにやら'"
をデータベースに食わせて実行し、その結果が返ってくるか否かで判断せにゃなりません。

引用返信 編集キー/
■19360 / inTopicNo.3)  Re[2]: 登録機能の重複不可(二重登録不可)について
□投稿者/ επιστημη (1040回)-(2008/05/22(Thu) 15:31:42)
επιστημη さんの Web サイト
...あれ? AccessのデータベースはUNIQUE項を作れないのかしら?
カラムをUNIQUEにしておけば(チェックせずとも)重複してINSERT/UPDATEできなくなりますけど。

引用返信 編集キー/
■19361 / inTopicNo.4)  Re[1]: 登録機能の重複不可(二重登録不可)について
□投稿者/ はつね (732回)-(2008/05/22(Thu) 15:33:43)
はつね さんの Web サイト
No19358 (F064 さん) に返信
> SQLのセレクト文で、
> 同じ文字列があったならエラーメッセージを出そうと考えました。

SELECT文を使ってデータをmdbファイル(Accessに登録ではなくAccessでも使っているmdbファイルに登録です)に
登録したときに二重登録ならばエラーが返るようにmdbファイル上のテーブル定義を行って下さい。

この例で言えば、テーブル名のなかの列名の列に対して[インデックス]を「はい(重複なし)」にします。

上記を踏まえて、プログラムで二重登録かをチェックするstepは次の2つ
(1) SELECT文をADO.NETを使ってmdbファイルに対して実行して、レコードが取れてきたら重複
(2) INSERT文をADO.NETを使ってmdbファイルに対して実行して、重複エラーが発生したら重複

http://hatsune.wankuma.com/seminer/tokyo16/17.PNG

引用返信 編集キー/
■19363 / inTopicNo.5)  Re[2]: 登録機能の重複不可(二重登録不可)について
□投稿者/ 774RR (185回)-(2008/05/22(Thu) 15:34:23)
+ textBox1.Text なんてじか書きしたら SQL Injection 脆弱性そのものぢゃん。
気をつけてな
引用返信 編集キー/
■19364 / inTopicNo.6)  Re[3]: 登録機能の重複不可(二重登録不可)について
□投稿者/ はつね (733回)-(2008/05/22(Thu) 15:35:02)
はつね さんの Web サイト
No19360 (επιστημη さん) に返信
> ...あれ? AccessのデータベースはUNIQUE項を作れないのかしら?
> カラムをUNIQUEにしておけば(チェックせずとも)重複してINSERT/UPDATEできなくなりますけど。

できる。
それ以前にSQL文を普通にif文に書いてもムリというところが最大のポイント。

31日の勉強会来てくれれば、50分でバッチリ分かるんだけどなー。この辺。

引用返信 編集キー/
■19369 / inTopicNo.7)  Re[2]: 登録機能の重複不可(二重登録不可)について
□投稿者/ F064 (15回)-(2008/05/22(Thu) 15:59:48)
No19359 (επιστημη さん) に返信
>>if ("SELECT * from テーブル名 where 列名 ='" + textBox1.Text + "'") ;
>
> ダメダメです。
> "SELECT * from テーブル名 where 列名 ='なにやら'"
> をデータベースに食わせて実行し、その結果が返ってくるか否かで判断せにゃなりません。
>

早速のご回答、ありがとうございます!
ダメダメでしたかー…
もしかしてifは使っちゃ駄目なんですね…?

列名 ='なにやら' の、'なにやら'は、比べたい入力項目でいいのですか?例えばテキストボックスなど…。
その場合ストリング型のテキストボックスなのですが、'textbox1.text'と打っていいのですか?(打ってみたところエラーは出ませんでした)

そして更に質問したいのですが、その「データベースに食わせる」というのはどんな動作なのですか?
物分りが悪くて申し訳ないです。
引用返信 編集キー/
■19371 / inTopicNo.8)  Re[4]: 登録機能の重複不可(二重登録不可)について
□投稿者/ F064 (16回)-(2008/05/22(Thu) 16:05:00)
返信を打ってる間に沢山のお返事が…。
みなさんありがとうございます!

これから返信して頂いた内容を読みながらいじっていきます。



引用返信 編集キー/
■19372 / inTopicNo.9)  Re[3]: 登録機能の重複不可(二重登録不可)について
□投稿者/ επιστημη (1043回)-(2008/05/22(Thu) 16:11:37)
επιστημη さんの Web サイト
> もしかしてifは使っちゃ駄目なんですね…?

"if使っちゃダメ"なんじゃなく、
"文字列を if の中に押し込んだだけで判定できる"と思ってるのがダメ。

> そして更に質問したいのですが、その「データベースに食わせる」というのはどんな動作なのですか?

ちょ...それわからんでどうやってデータベース・アプリ組むんだ?

引用返信 編集キー/
■19382 / inTopicNo.10)  Re[5]: 登録機能の重複不可(二重登録不可)について
□投稿者/ 鶏唐揚 (153回)-(2008/05/22(Thu) 17:01:20)
2008/05/22(Thu) 17:09:59 編集(投稿者)

No19371 (F064 さん) に返信
>if ("SELECT * from テーブル名 where 列名 ='" + textBox1.Text + "'") ;
これは「データベース操作を行うための単なる文字列」です。
単なる文字列自身にはデータベースを操作する能力などありません。

>その「データベースに食わせる」というのはどんな動作なのですか?
失礼ですが今の貴方の状態ではここで回答をもらっても解決できないと思われます
回答を出すのがこの掲示板の目的じゃないのかとも言われそうですが、データベースの基礎から
解説していては日が暮れてしまいます。

このあたりを読んでくださいまし
http://www.atmarkit.co.jp/fdotnet/basics/adonet01/adonet01_01.html
http://nemuneko.com/c_sharp_dot_net/ado_dot_net/

引用返信 編集キー/
■19383 / inTopicNo.11)  Re[5]: 登録機能の重複不可(二重登録不可)について
□投稿者/ F064 (17回)-(2008/05/22(Thu) 17:11:05)
二重登録不可、出来ました。
…といってもAccessの内容を変えただけなので、中身を打たなきゃ完全じゃないんですよね?


>>はつねさん
ご説明、ありがとうございます。
(1) SELECT文をADO.NETを使ってmdbファイルに対して実行して、レコードが取れてきたら重複
というのがまだ出来ていませんが、何とかやってみます。
それって矢張りテキストボックスの中身と比べて持ってこなきゃなんですか?

それと、以前お薦めして頂いたクリレポの本、あれからすぐ買ってみました!
私にはちょっと難しい内容でしたがお陰でクリレポは作れるようになりました。ありがとうございました。

勉強会、私の知識の低さだとこれからかなり大変だと思うので是非参加したいのですが
新潟⇔東京だと、ぱっと行くのが難しいです…。


>>774RRさん
私なんだか酷いコードを打ってしまっていたようですね…。
お恥ずかしいです。
侵入して情報を取られてしまうんですね。おっかないです、気をつけます。
ご指摘ありがとうございます。


>>επιστημηさん
何でもかんでもifに入れりゃ良いってものじゃないんですね。
調べ直してきます!

もしかしてとても恥ずかしい発言をしてしまったのかも…?
食わせるというのはAccessとC#を繋げるという意味ですか?



何だかとんでもない恥さらしみたいですみません。恥ずかしいです。

解決済み
引用返信 編集キー/
■19384 / inTopicNo.12)  Re[6]: 登録機能の重複不可(二重登録不可)について
□投稿者/ れい (577回)-(2008/05/22(Thu) 17:11:39)
2008/05/22(Thu) 17:12:51 編集(投稿者)

No19371 (F064 さん) に返信
>if ("SELECT * from テーブル名 where 列名 ='" + textBox1.Text + "'") ;
>その「データベースに食わせる」というのはどんな動作なのですか?

No19372 (επιστημη さん) に返信
> ちょ...それわからんでどうやってデータベース・アプリ組むんだ?

No19382 (鶏唐揚 さん) に返信
> 失礼ですが今の貴方の状態ではここで回答をもらっても解決できないと思われます

食わす、という比喩が分からないのでは?

SQL文を発行するとか、
DBサーバーに問合せを行うとか、
そういった意味です。>F064

それで分からないのであればNo19382を参考ですね。

#入れ違いでした。
解決済み
引用返信 編集キー/
■19387 / inTopicNo.13)  Re[7]: 登録機能の重複不可(二重登録不可)について
□投稿者/ F064 (18回)-(2008/05/22(Thu) 17:23:14)
>>鶏唐揚さん
ご回答ありがとうございます!
単なる文字列ですか…。またひとつ、勉強になりました。

URLの提示、ありがとうございます。
上のサイトはいつも見ているんですが、下のURLは見たことが無かったです。
早速お気に入りに追加させていただきました。

そうですね…。
ちょっとまだ私自身レベルが低すぎることは分かっているので毎回書き込むのが申し訳ないと言いますか、
戸惑いながらの書き込みなのですがやっぱりこのレベルでは書き込むのは失礼かもしれないですね…。
自粛したいと思います。
すみません…。


>>れいさん
砕いてくださりありがとうございます!
理解能力が限りなく低くて申し訳ないです。
SQL発行も食わすと言うんですね!

ありがとうございました!
解決済み
引用返信 編集キー/
■19396 / inTopicNo.14)  Re[8]: 登録機能の重複不可(二重登録不可)について
□投稿者/ ぽぴ王子 (380回)-(2008/05/22(Thu) 18:42:43)
ぽぴ王子 さんの Web サイト
No19387 (F064 さん) に返信

「食わす」というのは単なる比喩なので、わからなくても問題はないですよ。
実行することを「走らせる」と言うようなもので、知らないことは恥ではありません。

ただ、最初の
> if ("SELECT * from テーブル名 where 列名 ='" + textBox1.Text + "'") ;
こういったコードを見たので「えーとまず if で SQL を判別するっていうのは
データベースの前に文法も怪しいのかな…?」と思ったわけです。
それでちょっとばかりイメージがついちゃったんでしょうね。

鳥唐揚さんが
> >その「データベースに食わせる」というのはどんな動作なのですか?
> 失礼ですが今の貴方の状態ではここで回答をもらっても解決できないと思われます
> 回答を出すのがこの掲示板の目的じゃないのかとも言われそうですが、データベースの基礎から
> 解説していては日が暮れてしまいます。
こう書かれたのは、たぶん上記の流れがあったからだと思います。
「文法の理解もあやしそうだけど、そこから教える必要があるのかしら。そうなると
一朝一夕では終わらない上に理解してもらえるかどうか自信ないわ」とか。
ただ、だからといって
> ちょっとまだ私自身レベルが低すぎることは分かっているので毎回書き込むのが申し訳ないと言いますか、
> 戸惑いながらの書き込みなのですがやっぱりこのレベルでは書き込むのは失礼かもしれないですね…。
> 自粛したいと思います。
という感じで「書き込むのが申し訳ない」とか「書き込むのは失礼」とか思う必要は
ないです。もちろん自粛する必要も全くありません。
ただ、自分でも調べられるようなことをばんばん質問されると回答者も「もう!少しは
自分でも調べてよね!プン!」とかなっちゃうわけで、その辺は空気を読むというか
考えられるところは考えるのがいいのだと思います。

「食わす」の話もそうですが、知らないからといって知ったかぶりをされるよりは
ちゃんと聞いてくれた方が答えやすいですし、我々も知らないことはたくさんあるので
わからなければちゃんと聞きますしね。

なので、基礎的な部分は自分で勉強してもらえると助かりますが(if に SQL を入れても
データベースにはアクセスしてくれないとか)それ以外のところはもっとビシバシと
質問してくれて大丈夫ですよ。



以下余談。
> 理解能力が限りなく低くて申し訳ないです。
こんな感じで変にへりくだったりされると、逆にこそばゆくなっちゃうのは僕だけ?
理解できなかったのは「たまたま知らなかっただけ」なので「そうなんですか。知りません
でした。ありがとうございます。」ぐらいでいいのかなーなんて。
回答者も別に偉くないと思っているからか、こういうのってちょっと苦手かもです。
引用返信 編集キー/
■19400 / inTopicNo.15)  Re[9]: 登録機能の重複不可(二重登録不可)について
□投稿者/ はつね (735回)-(2008/05/22(Thu) 19:00:17)
はつね さんの Web サイト
質問内容が簡単なのか難しいかよりも、
質問者が問題を解決しようとする気持ちの真剣さが見えるかどうかの方が
重要だと思いますねー。

#解決チェックはずれてたいので、チェックしました。
解決済み
引用返信 編集キー/
■19413 / inTopicNo.16)  Re[10]: 登録機能の重複不可(二重登録不可)について
□投稿者/ 鶏唐揚 (155回)-(2008/05/22(Thu) 20:11:44)
>戸惑いながらの書き込みなのですがやっぱりこのレベルでは書き込むのは失礼かもしれないですね…。
「失礼ですが」というのは「私のこの発言によって、私が"貴方の能力は低い"と言うようなものなので礼を欠きますが」という意味です
「貴方の書き込みは失礼だ」という意味ではありませんことをご理解お願いします。
理解しようとする姿勢さえあれば、我々は助力を惜しみません。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -