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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

1716閲覧

フォームで入力されたものがデータベースに反映されない

ygoooo

総合スコア71

C#

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/07/13 07:53

編集2017/07/13 08:21

###前提・実現したいこと
visualstudioにて、簡単なフォームアプリを作っています。
今までjavaばかりやっていたので、C#でのデータベースとのやりとりでつまづいています。

###流れ
簡単なシフト管理システムです。
日付、勤務開始時間、勤務終了時間を入力すると自動的に実働時間が計算されDBに格納されます。

###発生している問題
タイトル通り、フォームに情報を正しく入力してもデータベースに入力されず、困っています。

フォームのCSファイルと、DBと直接やり取りをするCSファイルとでクラスファイルを分けているのですが、エラーらしいエラーが出ず、フォームから値を受け取るところ、DBに接続するところ、INSERTで更新するところ、どこで間違えているのかわかりません・・・

ドドド初心者なので基本的なところが間違っているかも・・・

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

---ファイルA--- SqlConnection connection; SqlCommand command; DataTable dt; //DB接続 public void Con() { try { string stConnectionString = string.Empty; connection = new SqlConnection(); command = new SqlCommand(); dt = new DataTable(); stConnectionString += @"Data Source = (IPアドレス);"; stConnectionString += @"Initial Catalog = (DB名);"; stConnectionString += @"Integrated Security = SSID;"; System.Data.SqlClient.SqlConnection cSqlConnection = (new System.Data.SqlClient.SqlConnection(stConnectionString)); connection = new SqlConnection(stConnectionString); connection.Open(); } catch (Exception e) { Console.WriteLine(e.Message); Console.ReadLine(); } } //DB更新(INSERT) public void Add(string date,string starttime,string endtime,string total,string addtime) { try { command = new SqlCommand(); string word = "'" + date + "','" + starttime + "','" + endtime + "','" +total + "','" + addtime + "','" + addtime + "'"; SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); command.CommandText = "INSERT INTO time_table (date,starttime,endtime,total,addtime,uptime) VALUES(" + word + ");"; command.Connection = connection; command.Transaction = transaction; command.ExecuteNonQuery(); } catch (Exception e) { Console.WriteLine(e.Message); Console.ReadLine(); } } //DB切断 public void Discon() { connection.Close(); } ---ファイルB--- //フォームから登録 private void inn_Click(object sender, EventArgs e) { A a = new A(); try { a.Con(); string date = dateTimePicker1.Value.ToString("yyyy/MM/dd"); string shour = comboBox1.SelectedItem.ToString(); string smin = comboBox2.SelectedItem.ToString(); string ehour = comboBox3.SelectedItem.ToString(); string emin = comboBox4.SelectedItem.ToString(); string stime = shour + smin; //時、分の結合 string etime = ehour + emin; int s = int.Parse(stime); //int変換 int f = int.Parse(etime); if (s > f) { //開始時間>終了時間の場合 エラー表示をし登録させない MessageBox.Show("正しい値を入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { stime = shour + ":" + smin; //コロンを入れ時間のフォーマットにする etime = ehour + ":" + emin; shour = date + " " + stime; ehour = date + " " + etime; DateTime startt, endt; startt = DateTime.Parse(stime); //DateTime型に変換 endt = DateTime.Parse(etime); TimeSpan subt = endt - startt; //実働時間の計算 String total = subt.ToString(); String time = DateTime.Now.ToString(); //登録時間の取得 d.Add(date, stime, etime, total, time); MessageBox.Show("登録完了", "ダイアログ", MessageBoxButtons.OK); } }catch(NullReferenceException ex) { Console.WriteLine(ex.Message); MessageBox.Show("未入力項目があります。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { d.Discon(); } }

###補足情報(言語/FW/ツール等のバージョンなど)
visualstudio
windowsフォームアプリケーション(.NET FW)VISUAL C

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

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

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

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

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

guest

回答3

0

inn_Clickでnew A()してa.Con()しているのに後続がd.Add()なのでdは接続されてないんでしょうね。

整理しましょう。とりあえず不要なメンバを作るのをおやめなさい。
それから余裕ができたらusing句を調べるとよいです。

投稿2017/07/14 01:59

haru666

総合スコア1591

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

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

0

ベストアンサー

こんにちは。

トランザクションに対するコミット, ロールバックが実装されていないようなので
追加してみては。

一連の流れはこのあたりが参考になるでしょうか。
https://msdn.microsoft.com/ja-jp/library/86773566(v=vs.110).aspx

投稿2017/07/13 07:59

編集2017/07/13 08:00
Tak1wa

総合スコア4791

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

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

ygoooo

2017/07/13 08:15

早速の回答、ありがとうございます! Addメソッドの冒頭に command = connection.CreateCommand(); SqlTransaction transaction = connection.BeginTransaction("SampleTransaction"); command.Connection = connection; command.Transaction = transaction; をいれコミットやロールバックを実装したのですが二行目にてInvalidOperationExceptionが出てしまいました・・・接続が閉じているとのことです どうしたらいいのでしょう・・・
Tak1wa

2017/07/13 08:22

connectionはOpenされているのですか?Statusみたいなのデバッグで確認できませんでしょうか。
guest

0

接続の開く場所がおかしかったのとトランザクション処理を追加したら無事動きました!
はじめにコメントをくださったTak1waさんをベストアンサーにいたします。
お二方ともありがとうございました。

投稿2017/07/14 02:32

ygoooo

総合スコア71

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問