実現したいこと
・Visual studio のフォームアプリにおけるSQLiteへのDB接続
前提
■使用環境
・VisualStudio2022 C#にてFormアプリを使用
・DB SQLite
・テーブル管理ツール pupSQLite
Formアプリにて、DB接続を伴うコーディングを行っていたところ、
以下のメッセージが表示されました。
発生している問題・エラーメッセージ
SQL logic error no such table MST_病院
該当のソースコード
C#
1■接続クラス 2 public clsDataBaseAccessManager() 3 { 4 try 5 { 6 this.con = new SQLiteConnection(); 7 this.con.ConnectionString = "Data Source=TEST_CLINIC.sqlite3"; 8 this.con.Open(); 9 Console.WriteLine("State: {0}", con.State); 10 var A = con.State; 11 string B = A.ToString(); 12 MessageBox.Show(B); // ここではopenのメッセージが表示されます。 13 } 14 15■データ取得箇所 16 private void frmMenu_Load(object sender, EventArgs e) 17 { 18 try 19 { 20 // テンプレート 21 clsDataBaseAccessManager dam = new clsDataBaseAccessManager(); 22 DataTable dtClinic = new DataTable(); 23 using (SQLiteCommand cmd = dam.CreateCommand()) 24 { 25 string sql = "select * from MST_病院 where 病院コード = @code"; 26 cmd.CommandText = sql; 27 cmd.Parameters.Add(new SQLiteParameter("@code", "1")); 28 dtClinic = dam.ExecuteQuery(cmd); 29 } 30 31 dam.CloseConnection(); 32 lblClinicNameMenu.Text = dtClinic.Rows[0]["病院名"].ToString(); 33 34 } 35 36 catch (Exception ex) 37 { 38 MessageBox.Show(ex.Message); 39 } 40 } 41
試したこと
pupSQLiteで取得したSELECT文を流してみましたが、欲しいデータの取得が出来ました。
なぜ、プログラム上でデータの取得が出来ないのでしょうか。
ご教示いただけますと有難いです。
よろしくお願いいたします。
※実際のSELECT結果になります。
select * from MST_病院 where 病院コード = @code ※@codeに1を代入しました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
パラメータが "001"と文字列になっているからSQLが
select * from MST_病院 where 病院コード = '001'
になっているとか?
申し訳ありません。質問に際して添付したソースが誤っていました。
正しいソースコードを記載いたしましたので、またご機会ございましたらよろしくお願いいたします。
テーブルのあるデータベースに接続できているのでしょうか?
データーベースファイルがどうなっているかエクスプローラで確認してみてはどうでしょうか?
SQL文のwhere以降を削除したらどうなりますか?
それでもエラーになるなら、もしかしたら、MST_病院というテーブルがないことなので、もしかしたら、データベースに指定しているものが違うとかないでしょうか?
YAmaGNZさま
ご指摘いただいた通りでした。
データベースファイルへの接続が出来ておらず、直接ファイルパスを指定して接続するように変更いたしました。
結果、接続が出来るようになりました。不勉強な質問にご回答いただきありがとうございました。
freemannさま
ご指摘いただいている通り、データベースに指定しているファイルに誤りがありました。
データベースのファイルパスを直接指定することでdbへの接続が出来ました。
不勉強な質問にご回答いただきありがとうございました。
回答4件
あなたの回答
tips
プレビュー