- 締切済み
C#のSQL言語について教えてください。
windowsフォーム上にデータベースのテーブルを載せて、 書き込むボタンを作り、その書き込み内容を書き込み直後にフォーム上のデータベースのテーブルに反映させたいと思っているのですが反映されません。コードが間違っていますでしょうか? これがソースです。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd = new SqlCommand("Select * From Product", cn); cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cmd.ExecuteNonQuery(); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd.Transaction = st; st.Commit(); cn.Close(); コミットはこれでいいのでしょうか? this.table1TableAdapter.Fill(this.database1DataSet.Table1); これを入れてもテーブルが更新されませんでした。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- oboroxx
- ベストアンサー率40% (317/792)
プロジェクトの中にapp.configがありませんか? ダブルクリックすると開いて、次のような感じになっているかと思います。なかにConnectionStringsのなかにConnectionString=.... のところにDBの接続情報がありますので確認してみてください。 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <connectionStrings> <add name="TransactionTest.Properties.Settings.pubsConnectionString" connectionString="Data Source=MAC-PC\SQLEXPRESS;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" /> <add name="TransactionTest.Properties.Settings.sample2ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\sample2.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
- oboroxx
- ベストアンサー率40% (317/792)
プログラムの中で指定しているのはEドライブですが、あるのはFドライブなのですか? もしそうであれば、おかしいのですが、確認お願いします。 また、ConnectionStringがapp.configのファイルの中に書かれていませんか? 書かれているようでしたらどうなっているのか教えてください。
補足
すみませんEドライブです。 問題ありません。 「また、ConnectionStringがapp.configのファイルの中に書かれていませんか?」 これはどのように確認すればよいのでしょうか? 初心者ですみません。
- oboroxx
- ベストアンサー率40% (317/792)
App.ico ↑これはアイコンのファイルですね。 これが影響で読み込めてないのではないですか? データベースはDatabase1.mdfであるはずですので。 ここを書きなおしてみてください。
補足
app.configのプロパティの完全パスは F:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\app.config こうでした。 ちなみにDatabase1.mdfのプロパティの完全パスは F:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf こうでした。
- oboroxx
- ベストアンサー率40% (317/792)
恐らくXSDを使っているという事で、ConnectionStringを名前を付けて保存していると思うのですが、その場合はapp.configに使っているConnectionStringが書かれています。 そこのパスがどうなっているかで確認できるかと思います。
補足
完全パス F:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\App.ico こんな感じでした。
- oboroxx
- ベストアンサー率40% (317/792)
一つ確認なんですが、TableAdapterを作成する時に、データベースをアタッチする時はプロジェクトにmdfファイルをコピーするか聞いてくるみたいなのですが、その時「はい」を選ぶとコピーされるようなのですが、そこを確認してもらえますか。 私の環境ではアタッチしてやるときでも、すぐに更新結果か確認できているので、すみませんがそこを見てみてください。
補足
どのようにして確認できるのでしょうか? 私の場合、データセットのテーブルをデザイナのフォーム上にドラッグした時に、デザイナの下にTableAdapterが作成されていました。
- oboroxx
- ベストアンサー率40% (317/792)
実際に動かして動作確認をしたサンプルプログラムを載せます。 どうやら色々バグがあったようです。 接続情報やテーブル名などは、適宜よみといてください。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=pubs;Integrated Security=True;"); cmd = new SqlCommand("UPDATE titles SET price= 1 WHERE title_id='ZZ9999'", cn); cn.Open(); SqlTransaction st = cn.BeginTransaction("tran1"); cmd.Transaction = st; cmd.ExecuteNonQuery(); st.Commit(); cn.Close(); this.titlesTableAdapter.Fill(this.pubsDataSet.titles);
補足
何度もすみません。 先ほどのを参考にさせていただき、このように書いてみたのですが、やはり、フォーム上のテーブルは更新されませんでした。(デバッグしなおすと更新されています。) SqlTransaction st = cn.BeginTransaction("tran1"); これのtran1は変える必要あるのでしょうか? SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cn.Open(); SqlTransaction st = cn.BeginTransaction("tran1"); cmd.Transaction = st; cmd.ExecuteNonQuery(); st.Commit(); cn.Close(); this.table1TableAdapter.Fill(this.database1DataSet.Table1);
- oboroxx
- ベストアンサー率40% (317/792)
すみませんでした。 以下のようにしてみてください。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd.Transaction = st; cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd.ExecuteNonQuery(); st.Commit(); cn.Close(); this.table1TableAdapter.Fill(this.database1DataSet.Table1);
補足
すみません。更新されませんでした。
- oboroxx
- ベストアンサー率40% (317/792)
次のような感じでしょうか。 動かしていませんのでエラーなどが出て対処できない場合は補足でお願いします。 SqlConnection cn; SqlCommand cmd; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd1 = new SqlCommand("Select * From Product", cn); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd2.Transaction = st; cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd2 = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cmd2.ExecuteNonQuery(); st.Commit(); cn.Close(); this.table1TableAdapter.Fill(this.database1DataSet.Table1);
補足
SqlConnection cn; SqlCommand cmd1; SqlCommand cmd2; cn = new SqlConnection(@"Data Source=.\SQLEXPRESS; AttachDbFilename=E:\開発用\入退室記録システム(接続から読取)\SampleApplicationByCS\Database1.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"); cmd1 = new SqlCommand("Select * From Product", cn); SqlTransaction st; st = cn.BeginTransaction("Table1"); cmd2.Transaction = st; cn.Open(); //Table1の学籍番号00000001の行の授業開始の列に1と入力する。 cmd2 = new SqlCommand("UPDATE Table1 " + "SET 授業開始='1' WHERE 学籍番号=" + response.Comm[ix].TagData, cn); cmd2.ExecuteNonQuery(); st.Commit(); cn.Close(); this.table1TableAdapter.Fill(this.database1DataSet.Table1); //////////////////////////// 「cmd2.Transaction = st;」のcmd2部分に「未割当のローカル変数cmd2が使用されました」と出ました。
補足
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <connectionStrings> <add name="SampleApplicationByCS.Properties.Settings.Database1ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>