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; |
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()); |
} |
} |
} |
``` |