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

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

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

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

Q&A

解決済

1回答

777閲覧

"ハンドル~例外"について

NayamiMondai

総合スコア28

C#

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

0グッド

0クリップ

投稿2019/05/12 02:33

教本による「ADO.NETによるデータベースプログラム作成」にて、
「エラー」表示(画像添付)が出て色々試みましたが、
力尽きました。(自身の能力不足による)
御助言、お願いします。

△環境
・Windows7
・vs2017community

△作成過程
1、データベースを作成。 (手順省略)
2、テーブルの作成。   (手順省略)
3、データの登録。    (手順省略)
*10件ほど登録(項目は、Id、氏名、郵便番号、住所、電話)

4、データベースアプリの作成過程。
1)接続文字列の作成。  (手順省略)
(テスト接続、成功)
2)データ表示を行う操作画面の作成と、其れに伴うイベントハンドラーの作成(手順省略)
(項目は、全件表示、表示クリア、Idを指定して抽出、住所を指定検索、プログラム実行は成功)
3)データ登録用フォーム(Form2)の作成と、イベントハンドラーの作成  (手順省略)
(項目は、Id、顧客名、郵便番号、住所、電話番号、登録、プログラム実行は成功)
~此処でプログラムを実行した際(一回目)、成功しましたが、翌日二回目の実行時、エラー発生。(上同画像添付)
*一回目は成功したので、作業続行。
4)データ消去用フォーム(Form2)を作成と、イベントハンドラーの作成  (手順省略)
(項目は、TextBox、該当するIdのデータを消去)
~プログラム実行後エラー発生。                             (上同画像添付)
以上ですが、御助言宜しくお願いします。
尚、御助言頂くに当たり、記述方法等の不手際については、予め深くお詫び申し上げます。
追伸:エラー発生のForm2のコードも添付します。

using

1using System.Collections.Generic; 2using System.ComponentModel; 3using System.Data; 4using System.Drawing; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8using System.Windows.Forms; 9using System.Data.SqlClient; 10namespace DataProviderApp0A 11{ 12 public partial class Form2 : Form 13 { 14 private SqlConnection cn = new SqlConnection(); 15 private SqlCommand cmd = new SqlCommand(); 16 private SqlDataReader rd; 17 18 public Form2() 19 { 20 InitializeComponent(); 21 } 22 23 private void button1_Click(object sender, EventArgs e) 24 { 25 cn.ConnectionString = 26 @"Data Source=(LocalDB)\MSSQLLocalDB;" + 27 @"AttachDbFilename =| DataDirectory |\ Database0A.mdf;" + 28 "Integrated Security=True;Connect Timeout=30"; 29 cn.Open(); 30 cmd.Connection = cn; 31 cmd.CommandType = CommandType.Text; 32 cmd.CommandText = "INSERT INTO [dbo].[Custome]VALUES(" + 33 "'" + textBox1.Text + "'," + 34 "N'" + textBox2.Text + "'," + 35 "N'" + textBox3.Text + "'," + 36 "N'" + textBox4.Text + "'," + 37 "'" + textBox5.Text + "',)"; 38 rd = cmd.ExecuteReader(); 39 rd.Close(); 40 cn.Close(); 41 this.Close(); 42 } 43 } 44} 45 46コード 47```![イメージ説明](82202c0cc7e8500f490107070d2948fc.png)

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

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

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

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

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

Zuishin

2019/05/12 03:01

まずアレンジせず教本通りにやってみてください。
NayamiMondai

2019/05/12 05:34

御助言、有難うございます。 アレンジはしておりません。 変更したのは、サンプルと区別するため、データベース名のみです。
Zuishin

2019/05/12 06:39

だとすると、教本替えることができるんだったら替えた方がいいですね。
NayamiMondai

2019/05/12 08:02

有難うございます。 その後、再度作成過程をなぞって見ました。 で、以下の「エラー」が表示されました。 「"C:\Users\genki\source\repos\DataProviderApp0A\DataProviderApp0A\Datab"C:\Users\genki\source\repos\DataProviderApp0A\DataProviderApp0A\Database0A_log.ldf" を "bin\Debug\Database0A_log.ldf" にコピーできませんでした。10 回の再試行回数を超えたため、失敗しました。このファイルは "SQL Server Windows NT - 64 Bit (6860)" によってロックされています」 で、変わった操作の自覚は、今までは、「デバックなしで開始」でしたが、今回は「開始」をクリックしたことです。 追伸:此の質問がルール違反でしたらお許しください。
退会済みユーザー

退会済みユーザー

2019/05/12 09:01

ルール違反とまでは言えないかもしれませんが、マナー違反は asm さんからレスをもらっているにのに、フィードバックを返していないことだと思います。
NayamiMondai

2019/05/12 12:25

御指摘、有難うございます。 asmさんにフィードバックを返そうとしたら、どの様にしたらいいのですか?
Zuishin

2019/05/12 12:37

回答の近くにコメント欄があります。
NayamiMondai

2019/05/12 12:59

asmさんのレスが見当たりません。 私の質問、初めに画像を添付するのを忘れ、削除依頼する前に、慌てて画像添付をして、送信しました。 で、asmさん、見当たらないのでしょうかね?
NayamiMondai

2019/05/12 13:05

すみません。 今、コメント欄ありました。 すみません。
guest

回答1

0

ベストアンサー

画像を見ると「attachdbfilenameに無効な値をいれようとしている。」と出ています。

ソースを見ると

@"AttachDbFilename =| DataDirectory |\ Database0A.mdf;" +

となっています。

気になるのは、空白を入れていいのか?という部分です。

特に、\直後の空白は気になります。
windowsにおいて、ファイル名の先頭・末尾に空白の入ったファイルはとても扱いが難しいのです。

投稿2019/05/12 03:22

asm

総合スコア15147

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

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

Zuishin

2019/05/12 03:32

|DataDirectory| もマクロなのでスペースを入れてはいけなかったはずです。 にしても質問のコードはエラーハンドリングもしてないし SQL パラメーターも使ってないし初期化の方法もおかしいし、ひどいコードですね。教本にはもっとましなコードが書いてあるのではないかと思うんですが。
asm

2019/05/12 04:27

やはり、マクロの方もダメでしたか。 まぁ、マクロとして認識されない場合は無効なファイル名になりますので、ファイル名については試行錯誤すりゃいいかと コードは・・・一回試してみるだけならいいですけど 実際に使うつもりならばきちんとしたコードを学ぶべきですね
退会済みユーザー

退会済みユーザー

2019/05/12 06:59

この質問者さんは多分 MSDN Forum で質問していた人で、そこで自分が問題を再現するのに必要最低限にコードを削るようアドバイスしたという経緯があります。コードがアレなのはそのせいかもしれません。
退会済みユーザー

退会済みユーザー

2019/05/12 07:47

マルチポストではなさそうで、MSDN Forum では同じスレッドで違う質問をしたのに対し、新たに別のスレッドを立てて質問するようお願いした経緯があります。
Zuishin

2019/05/12 07:59

そこまで見ていませんでした。なるほど。
NayamiMondai

2019/05/12 13:02

返信、遅れてすみません。 他の方からのご指摘を受けて気づきました。 本当にすみません。 以後、気をつけます。
退会済みユーザー

退会済みユーザー

2019/05/13 01:38

asm さんのレスに対するフィードバックは書かないのですか? MSDN Forum の方でもお願いしたのですが、 (1) レスに従い修正したらどういう結果になったか書いてください。 (2) レスの内容が分からないということであれば、分からないままにしておかないで、質問してください。 文章でのやり取りで話が通じないようですと、ここのような掲示板で解決するのは難しいです。 近くに聞ける人がいれば、聞いてみることをお勧めします。そういう人がいなければ、学校に通って講師に聞くとかすることを考えてみてはいかがでしょう。
asm

2019/05/13 02:25

今回の回答のように問題点を指摘に留まり、具体的な修正指示がない場合は 修正した方法も明示してほしいですね。 また、結果としてエラーのままでもエラーメッセージなどに変化があったのなら それを報告するとよいでしょう。
NayamiMondai

2019/05/13 06:05

asmさんへ SurfeOnWwwさん御指摘の通り、”文章でのやり取りで話が通じない”レベルなもんで、ご迷惑をおかけしております。申し訳ないです。 asmさんの回答ですが、私は全然理解できておりません。ですので、レスも回答自体の記述ではなく、 回答して頂いたお礼に留まりました。 一つ、言い訳させて頂きますと、回答の意味を考え、検索等をしていると、SurfeOnWwwさんからレスのご指摘を頂き、慌ててお礼と、その後の自分の”行動”を記載し投稿しました。 話はそれましたが、大変図図しいお願いですが、改めて回答の意味と、其の回答に基づいて私がするべき事を教えて頂けますと、幸いです。
NayamiMondai

2019/05/13 06:14

すみません。 要らん事ですが、教本には、サンプルがありまして、此のサンプルのコードと教本を見て作成した自身のコードを、「WinMerge」を用いて比較しましたが、一致しております。(もし、此の文がルールいはんでしたら、お許しください。直ぐ削除します)
YAmaGNZ

2019/05/13 06:58

asmさんの回答、Zuishinさんのコメントから、スペースは入れてはいけないと読み取れると思うのですが、これに対して何か試したことはあるのですか?
asm

2019/05/13 10:06

> 改めて回答の意味 コード内の @"AttachDbFilename =| DataDirectory |\ Database0A.mdf;" を @"AttachDbFilename=|DataDirectory|\Database0A.mdf;" に書き換えてコンパイルし直せば改善しそう。 という意味です。
NayamiMondai

2019/05/13 11:13

有難うございます。 御助言通り実行した結果、改善しました。 改善は、初めの質問4、3)まで改善しました。 で、4,4)を実行したところエラー(前回とは違うエラー表示)が、出て現在其のエラーの意味を模索している段階です。本当は直ぐお知らせして、ご助言を賜りたいところですが、先ずは自身の努力が肝要かと思い、今に至っております。(此処からの添付の仕方も分かりません) 差し支えなければ、書き写して送信してもよろしいでしょうか?
asm

2019/05/13 11:48

長くなりそうならば、質問文を編集するか、 もしくは、別の問題になっているのならば新しい質問を立てるとよいです。
NayamiMondai

2019/05/13 12:26

遅くなってすみません。 下記に書き写しました。(1011とは、追加したIdです) Unclosed quotation mark after the character string 'CustomerWHERE Id"1011". Incorrect syntax near 'CustomerWHERE Id"1011" ▲詳細(D) </configuration> 以上です。
asm

2019/05/13 21:57

問題が発生した部分のソースがないため適当な事しか言えませんが まずは実行しようとしたクエリを、何かに表示するかログをとるかして全文を確認するべきです (クリップボードにコピーできる方法が望ましいです。また、メッセージボックスの場合ctrl+cでコピーできることもあるのを覚えておくとよいでしょう。) Customer WHERE Id = "1011" の間違いだと思いますが、断片では推測しかできません。
NayamiMondai

2019/05/14 06:34

有難うございます。 御助言通りにしましたところ、全て上手くいきました。(今までエラーが、嘘のようです) 本当に有難うございます。 今、感謝感激で一杯です。 又、”Customer WHERE Id = "1011"も御指摘の通りです。 今後も更に精進します。 此れからも、御指導宜しくお願いします。 追伸:2019/05/12 12:32、Zuishinさん御指摘の ①"|DataDirectory| もマクロなのでスペースを入れてはいけなかったはずです。"の"マクロ"意味がわか りません。 ②"エラーハンドリングもしてない"と、ありますが意味と具体的な手順を知りたいです。 ③" SQL パラメーターも使ってない"と、ありますが、意味とSQL パラメーターを使う方法を知りたい   です。 ④"初期化の方法もおかしい"と、ありますが、やはり意味と正しい方法を知りたいです。  以上、4つの疑問がルール&マナー違反でしたら、平にご容赦申し上げます。
Zuishin

2019/05/14 06:41

ここで分かりやすく答えることはできません。教本をまともなものにかえてください。それで全て解決します。
asm

2019/05/14 07:11

話題が変わりますしコメント欄で回答できる分量じゃなくなるので、本回答に関わりのある部分だけ > マクロの意味 |DataDirectory|の一塊が置換のための目印になっているという指摘です。 wikipedia曰く「テキスト等の変換を記述する変換言語もマクロと呼ばれる」との事です。
NayamiMondai

2019/05/14 07:47

有難うございます。 此れ(①~④)については、追い追い習得していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問