お世話になります。
C# windowsフォームにて検索機能を実装しているのですが、なにも設定しない状態の検索は可能なのですが、フォームから検索条件を指定するとエラーが出ます。
-------------エラー内容-----------------------
型 'System.InvalidOperationException' のハンドルされていない例外が System.Data.SQLite.dll で発生しました
追加情報:Database is not open
また入力値をwhere句のパラメータに取り込む時にこのようなコードの書き方ではまずいでしょうか?
よろしくお願いいたします。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.Data.SQLite; 11 12namespace WindowsFormsApplication4 13{ 14 public partial class Itiran : Form 15 { 16 public Itiran() 17 { 18 InitializeComponent(); 19 } 20 private void btnsintou_Enter(object sender, EventArgs e) 21 { 22 //新規登録ボタンを押下すると登録画面に遷移 23 Touroku Touroku = new Touroku(); 24 Touroku.Show(); 25 this.Visible = false; 26 } 27 private DataTable datatable = new DataTable(); 28 protected override void OnLoad(EventArgs e) 29 { 30 dataGridView1.DataSource = datatable; 31 base.OnLoad(e); 32 } 33 //テーブルの内容を表示 34 private void buttonkensaku_Click(object sender, EventArgs e) 35 { 36 //検索条件がない場合 37 if (txtSiteNm.Text == "") 38 { 39 //using (SQLiteConnection con = new SQLiteConnection("Data Source = C:\\Users/BC049/Desktop/WindowsFormsApplication4/myfriend.sqlite3")) 40 using (SQLiteConnection con = new SQLiteConnection("Data Source = C:\\Users/Takaaki Kawabe/Desktop/WindowsFormsApplication4 /myfriend.sqlite3")) 41 42 using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI", con)) 43 { 44 //データグリッドビューのクリア 45 datatable.Clear(); 46 47 var Datatable = new DataTable(); 48 dataGridView1.DataSource = datatable; 49 adapter.Fill(datatable); 50 51 //dataGridView1.Columns[0].HeaderText = "ID"; 52 //No,SiteNm,LoginId,Password,BIKO カラム順 53 //テーブルの内容表示 54 dataGridView1.Columns[0].HeaderText = "No"; 55 dataGridView1.Columns[1].HeaderText = "サイト名"; 56 dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等"; 57 dataGridView1.Columns[3].HeaderText = "パスワード"; 58 dataGridView1.Columns[4].HeaderText = "登録日"; 59 dataGridView1.Columns[5].HeaderText = "備考"; 60 61 } 62 } 63 else 64 { 65 string dbConnectionString = "Data Source = C:\\Users/Takaaki Kawabe/Desktop/WindowsFormsApplication4 /myfriend.sqlite3"; 66 using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString)) 67 { 68 cn.Open(); 69 using (SQLiteTransaction trans = cn.BeginTransaction()) 70 { 71 SQLiteCommand cmd = cn.CreateCommand(); 72 //select文を走らせる 73 cmd.CommandText = "SELECT * from PASS_KANRI where SiteNm = @SiteNm"; 74 75 //パラメータのセット 76 cmd.Parameters.Add("SiteNm", System.Data.DbType.String); 77 78 cmd.Parameters["SiteNm"].Value = txtSiteNm.Text; 79 80 //データグリッドビューのクリア 81 datatable.Clear(); 82 83 var Datatable = new DataTable(); 84 dataGridView1.DataSource = datatable; 85 86 dataGridView1.Columns[0].HeaderText = "No"; 87 dataGridView1.Columns[1].HeaderText = "サイト名"; 88 dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等"; 89 dataGridView1.Columns[3].HeaderText = "パスワード"; 90 dataGridView1.Columns[4].HeaderText = "登録日"; 91 dataGridView1.Columns[5].HeaderText = "備考"; 92 93 cmd.ExecuteNonQuery(); 94 95 } 96 //using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from PASS_KANRI where SiteNm = ?", con)) 97 //{ 98 // //using (SQLiteCommand cmd = con.CreateCommand()) 99 // //{ 100 // // //パラメータのセットと確定 101 // cmd.Parameters.Add(new SQLiteParameter(DbType.String, textSiteNm)); 102 // cmd.Prepare(); 103 104 // //ExecuteReaderするとreaderが帰ってくる 105 // using (SQLiteDataReader reader = cmd.ExecuteReader()) 106 // { 107 // //行の読み込み 108 // while (reader.Read()) 109 // { 110 // //データグリッドビューのクリア 111 // datatable.Clear(); 112 113 // var Datatable = new DataTable(); 114 // dataGridView1.DataSource = datatable; 115 // //テーブルの内容表示 116 // dataGridView1.Columns[0].HeaderText = "No"; 117 // dataGridView1.Columns[1].HeaderText = "サイト名"; 118 // dataGridView1.Columns[2].HeaderText = "ログインIDまたはEmail等"; 119 // dataGridView1.Columns[3].HeaderText = "パスワード"; 120 // dataGridView1.Columns[4].HeaderText = "登録日"; 121 // dataGridView1.Columns[5].HeaderText = "備考"; 122 123 // } 124 // } 125 //} 126 127 } 128 } 129 } 130 /// <summary> 131 /// 132 /// </summary> 133 /// <param name="sender"></param> 134 /// <param name="e"></param> 135 private void dataGridView1_Validating(object sender, CancelEventArgs e) 136 { 137 //ヘッダーをコピーしないようにする 138 //dataGridView1.ClipboardCopyMode = 139 // DataGridViewClipboardCopyMode.EnableWithoutHeaderText; 140 //選択されたセルの内容をクリップボードへコピー 141 //Clipboard.SetDataObject(dataGridView1.GetClipboardContent()); 142 } 143 } 144} 145 146
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/21 16:04