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

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

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

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

SQLite

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

Q&A

解決済

3回答

830閲覧

sqliteの検索結果のあるカラムが0になる

itoho

総合スコア22

C#

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

SQLite

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

0グッド

0クリップ

投稿2019/01/22 13:50

sqliteの検索結果のあるカラムが0になる

C#のwindowsformsアプリケーションであるデータをキーワードで検索をして、結果を表示するというものを作っているのですが、結果の一部が取得できません。(0となります)

発生している問題・エラーメッセージ

sdr["means"].ToString();の結果が0になる。(うまく取得できないカラム)
ほかのカラムid,titleはちゃんと取得できています。
データベースの構造はint型のかぶらない整数id、varchar型のtitle、varcha型のmeansです
エラーは発生していません。

該当のソースコード

"robot"と検索した結果です

C

1private void textBox1_TextChanged(object sender, EventArgs e) 2 { 3 if (textBox1.TextLength != 0) 4 { 5 { 6 SQLiteConnection dic = new SQLiteConnection("Data Source=dictionary/pdic_eiwa.db;Version=3;"); 7 dic.Open(); 8 try 9 { 10 string sql = "select * from jisyo where title = '"+textBox1.Text.ToString()+"'"; 11 12 SQLiteCommand com = new SQLiteCommand(sql, dic); 13 SQLiteDataReader sdr = com.ExecuteReader(); 14 while (sdr.Read() == true) 15 { 16 titleBox.Text = sql; //sdr["title"].ToString(); //→select * from jisyo where title = 'robot' となっている 17 dai1index.Text = sdr["title"].ToString();// robotとなっている 18 dai2index.Text = sdr["means"].ToString();// 0 となっている おかしいところ 19 dai3index.Text = sdr["id"].ToString();//39487となっている 20 21 } 22 sdr.Close(); 23 } 24 finally 25 { 26 dic.Close(); 27 } 28 } 29 } 30 31 }

試したこと

C# sqlite selectでググった

補足情報(FW/ツールのバージョンなど)

NETFramework,Version=v4.6.1
SQLiteはNuGetから入れた

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

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

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

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

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

guest

回答3

0

テーブルを作成するときにinteger型になっていました。
TEXT型に直してもう一度作り直したら動きました。
DBrowserは高機能すぎて間違ったデータベースも見れてしまうので
逆にミスに気付きにくくなることもあるんですね

投稿2019/01/26 13:00

itoho

総合スコア22

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

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

0

ベストアンサー

dai2index.Text = sdr["means"].ToString();// 0 となっている おかしいところ

ここはどうやって確認しましたか?
dai2index.Textの値が0とかではなくで、sdr["means"]やsdr["means"].ToString()で確認しましたか?

投稿2019/01/23 01:38

編集2019/01/23 01:40
sazi

総合スコア25138

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

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

itoho

2019/01/23 12:52

```sdr["means"]やsdr["means"].ToString()で確認しましたか?``` 試しにブレークポイントを作り( while (sdr.Read() == true){の後)、その一行手前に var meeens = sdr["means"]; としてみたところ       名前   値 種類 meeens 0 object {long} となっていました。 console.writeline(sdr["means"]);とすると0になりました。 DBのデータが怪しいので一部id書き換え、変更が反映されているのを確認しました。 文字コードが違っていたら0になる仕様とかあるんでしょうか?
itoho

2019/01/23 13:22 編集

https://cdn.discordapp.com/attachments/502039587229532160/537621311111954433/unknown.png 気になる点を見つけました。ブレークポイントの中で変数sdrを見たところ_fieldTypeArrayのなかの[2]がaffinity(辞書で調べたら類似性?)TEXTなのにINTになっています 遅くなりましたがDBbrowserでsql分を実行したときはちゃんと一個のレコードが帰ってきて中身も正常です
guest

0

入ってるデータとそのSQLを直に実行したらどうなのかとか、最低限その辺の情報が無い限りデータが'0'で登録されてるだけとしか思えません
DB Browser for SQLite
このツールで中身は確認できていますか?
SQL文の実行
こちらを見てSQLを実行した結果はどうでしたか?

あと、セキュリティ上の問題がありますので

C#

1string sql = "select * from jisyo where title = '"+textBox1.Text.ToString()+"'";

こちらはパラメータでバインドする形にしましょう。
画面のTextBoxから自分で入れるだけであっても癖になるといけませんので

投稿2019/01/22 14:51

len_souko

総合スコア1337

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問