質問編集履歴

1 あかん

yamaguti

yamaguti score 133

2017/01/21 20:05  投稿

C#フォームの検索機能 Sqliteのパラメータ設定について
お世話になります。
C# windowsフォームにて検索機能を実装しているのですが、なにも設定しない状態の検索は可能なのですが、フォームから検索条件を指定するとエラーが出ます。
-------------エラー内容-----------------------
型 'System.InvalidOperationException' のハンドルされていない例外が System.Data.SQLite.dll で発生しました
追加情報:Database is not open
また入力値をwhere句のパラメータに取り込む時にこのようなコードの書き方ではまずいでしょうか?
よろしくお願いいたします。
```C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
namespace WindowsFormsApplication4
{
   public partial class Itiran : Form
   {
       public Itiran()
       {
           InitializeComponent();
       }
       private void btnsintou_Enter(object sender, EventArgs e)
       {
           //新規登録ボタンを押下すると登録画面に遷移
           Touroku Touroku = new Touroku();
           Touroku.Show();
           this.Visible = false;
       }
       private DataTable datatable = new DataTable();
       protected override void OnLoad(EventArgs e)
       {
           dataGridView1.DataSource = datatable;
           base.OnLoad(e);
       }
       //テーブルの内容を表示
       private void buttonkensaku_Click(object sender, EventArgs e)
       {
           //using (SQLiteConnection con = myfriend.sqlite3"))
           using (SQLiteConnection con = new SQLiteConnection("Data Source = C:\\Users/myfriend.sqlite3"))
               //検索条件がない場合
               if (textBox1.Text == "")
           //検索条件がない場合
           if (txtSiteNm.Text == "")
           {
               //using (SQLiteConnection con = new SQLiteConnection("Data Source = C:\\Users/BC049/Desktop/WindowsFormsApplication4/myfriend.sqlite3"))
               using (SQLiteConnection con = new SQLiteConnection("Data Source = C:\\Users/Takaaki Kawabe/Desktop/WindowsFormsApplication4 /myfriend.sqlite3"))
               using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI", con))
               {
                   using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI", con))
                   //データグリッドビューのクリア
                   datatable.Clear();
                   var Datatable = new DataTable();
                   dataGridView1.DataSource = datatable;
                   adapter.Fill(datatable);
                   //dataGridView1.Columns[0].HeaderText = "ID";
                   //No,SiteNm,LoginId,Password,BIKO カラム順
                   //テーブルの内容表示
                   dataGridView1.Columns[0].HeaderText = "No";
                   dataGridView1.Columns[1].HeaderText = "サイト名";
                   dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等";
                   dataGridView1.Columns[3].HeaderText = "パスワード";
                   dataGridView1.Columns[4].HeaderText = "登録日";
                   dataGridView1.Columns[5].HeaderText = "備考";
               }
           }
           else
           {
               string dbConnectionString = "Data Source = C:\\Users/Takaaki Kawabe/Desktop/WindowsFormsApplication4 /myfriend.sqlite3";
               using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString))
               {
                   cn.Open();
                   using (SQLiteTransaction trans = cn.BeginTransaction())
                   {
                       SQLiteCommand cmd = cn.CreateCommand();  
                       //select文を走らせる  
                       cmd.CommandText = "SELECT * from PASS_KANRI where SiteNm = @SiteNm";  
 
                       //パラメータのセット  
                       cmd.Parameters.Add("SiteNm", System.Data.DbType.String);  
 
                       cmd.Parameters["SiteNm"].Value = txtSiteNm.Text;  
 
                       //データグリッドビューのクリア
                       datatable.Clear();
                       var Datatable = new DataTable();
                       dataGridView1.DataSource = datatable;
                       adapter.Fill(datatable);  
                       //dataGridView1.Columns[0].HeaderText = "ID";  
                       //No,SiteNm,LoginId,Password,BIKO カラム順  
                       //テーブルの内容表示  
                       dataGridView1.Columns[0].HeaderText = "No";
                       dataGridView1.Columns[1].HeaderText = "サイト名";
                       dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等";
                       dataGridView1.Columns[3].HeaderText = "パスワード";
                       dataGridView1.Columns[4].HeaderText = "登録日";
                       dataGridView1.Columns[5].HeaderText = "備考";
                   }
               }
               else
               {
                   using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI where SiteNm = ?", con))
                   {
                       using (SQLiteCommand cmd = con.CreateCommand())
                       {
                           //パラメータのセットと確定
                           cmd.Parameters.Add(new SQLiteParameter(DbType.String, textSiteNm));
                           cmd.Prepare();
                           //ExecuteReaderするとreaderが帰ってくる
                           using (SQLiteDataReader reader = cmd.ExecuteReader())
                           {
                               //行の読み込み
                               while (reader.Read())
                               {
                                   //データグリッドビューのクリア
                                   datatable.Clear();
                                   var Datatable = new DataTable();
                                   dataGridView1.DataSource = datatable;
                                   //テーブルの内容表示
                                   dataGridView1.Columns[0].HeaderText = "No";
                                   dataGridView1.Columns[1].HeaderText = "サイト名";
                                   dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等";
                                   dataGridView1.Columns[3].HeaderText = "パスワード";
                                   dataGridView1.Columns[4].HeaderText = "登録日";
                                   dataGridView1.Columns[5].HeaderText = "備考";
                               }
                           }
                       }
                       cmd.ExecuteNonQuery();
                   }
                   //using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI where SiteNm = ?", con))  
                   //{  
                   //   //using (SQLiteCommand cmd = con.CreateCommand())  
                   //   //{  
                   //   //   //パラメータのセットと確定  
                   //   cmd.Parameters.Add(new SQLiteParameter(DbType.String, textSiteNm));  
                   //   cmd.Prepare();  
 
                   //   //ExecuteReaderするとreaderが帰ってくる  
                   //   using (SQLiteDataReader reader = cmd.ExecuteReader())  
                   //   {  
                   //       //行の読み込み  
                   //       while (reader.Read())  
                   //       {  
                   //           //データグリッドビューのクリア  
                   //           datatable.Clear();  
 
                   //           var Datatable = new DataTable();  
                   //           dataGridView1.DataSource = datatable;  
                   //           //テーブルの内容表示  
                   //           dataGridView1.Columns[0].HeaderText = "No";  
                   //           dataGridView1.Columns[1].HeaderText = "サイト名";  
                   //           dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等";  
                   //           dataGridView1.Columns[3].HeaderText = "パスワード";  
                   //           dataGridView1.Columns[4].HeaderText = "登録日";  
                   //           dataGridView1.Columns[5].HeaderText = "備考";  
 
                   //       }  
                   //   }  
                   //}  
 
               }
           }  
       }
 
 
 
 
       /// <summary>
       ///
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void dataGridView1_Validating(object sender, CancelEventArgs e)
       {
           //ヘッダーをコピーしないようにする
           //dataGridView1.ClipboardCopyMode =
           // DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
           //選択されたセルの内容をクリップボードへコピー
           //Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
       }
   }
}
 
```
  • C#

    14241 questions

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

  • SQLite

    1260 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る