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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

4回答

1341閲覧

C#におけるデータベースへの接続(SQLiteを使用)

migio

総合スコア49

C#

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2023/02/12 09:07

編集2023/02/12 10:26

実現したいこと

・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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

YAmaGNZ

2023/02/12 09:16

パラメータが "001"と文字列になっているからSQLが select * from MST_病院 where 病院コード = '001' になっているとか?
migio

2023/02/12 10:31

申し訳ありません。質問に際して添付したソースが誤っていました。 正しいソースコードを記載いたしましたので、またご機会ございましたらよろしくお願いいたします。
YAmaGNZ

2023/02/12 10:59

テーブルのあるデータベースに接続できているのでしょうか? データーベースファイルがどうなっているかエクスプローラで確認してみてはどうでしょうか?
freemann

2023/02/12 11:04

SQL文のwhere以降を削除したらどうなりますか? それでもエラーになるなら、もしかしたら、MST_病院というテーブルがないことなので、もしかしたら、データベースに指定しているものが違うとかないでしょうか?
migio

2023/02/12 11:08

YAmaGNZさま ご指摘いただいた通りでした。 データベースファイルへの接続が出来ておらず、直接ファイルパスを指定して接続するように変更いたしました。 結果、接続が出来るようになりました。不勉強な質問にご回答いただきありがとうございました。
migio

2023/02/12 11:11

freemannさま ご指摘いただいている通り、データベースに指定しているファイルに誤りがありました。 データベースのファイルパスを直接指定することでdbへの接続が出来ました。 不勉強な質問にご回答いただきありがとうございました。
guest

回答4

0

自己解決

データベースのファイルパスの指定先を変更した結果、接続出来るようになりました。
皆さま、ご回答いただきありがとうございました。

投稿2023/02/12 11:12

migio

総合スコア49

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

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

0

TEST_CLINIC.sqlite3こちらですが、この中に"MST_病院"は存在するのでしょうか?

実際に動くかわからないのですが、↓のSQLを実行してもらって、存在するか確認して頂いても宜しいでしょうか?
"SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY 1"

投稿2023/02/12 11:15

kirissaki

総合スコア41

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

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

0

cmd.Parameters.Add(new SQLiteParameter("@code", "1"));

 ↓↓↓

cmd.Parameters.Add(new SQLiteParameter("@code", 1));

としたらどうなりますか?

投稿2023/02/12 10:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

migio

2023/02/12 10:48

コメントいただきありがとうございます。 ご指摘の通り、以下のように変更いたしました。 >> cmd.Parameters.Add(new SQLiteParameter("@code", 1)); しかし、エラー内容は変わらず「SQL logic error no such table: MST_病院」になってしまいました。
退会済みユーザー

退会済みユーザー

2023/02/12 11:15

パスが違うとか? > this.con.ConnectionString = "Data Source=TEST_CLINIC.sqlite3"; TEST_CLINIC.sqlite3 って何ですか?
migio

2023/02/12 13:27

SurferOnWwwさま ご指摘いただきありがとうございます。 記載いただいている通り、パスが異なりました。 slnフォルダと同階層に[TEST_CLINIC.sqlite3](データベース)を設置しており、 そのファイルのみ記載していました。 該当のファイルパスを指定したところ、接続が出来ました。 不勉強なご質問、失礼いたしました。
guest

0

DatabaseAccessManager dam = new DatabaseAccessManager();
ここが、
clsDatabaseAccessManager dam = new clsDatabaseAccessManager();

ではないかなと・・・。

以下は参考までに。
SQLiteへの接続方法

SQLiteでのSQL文内のパラメータの使い方

投稿2023/02/12 09:36

freemann

総合スコア264

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

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

migio

2023/02/12 10:28

大変申し訳ございません。 私がソースコードの記載を誤っていました。 記載していたソースは別のcsファイルでした。 内容を最新化いたしました。 またご機会がございましたら何卒よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問