下記サイトを参考にSystem.Data.SQLite.dllを導入し同サイトのサンプルを実行したところ、データ追加の処理で「SQLiteExceptionはハンドルされませんでした。unable to open database file」と言う例外が発生し、解決方法が分からず困っています。
参考URL:http://dangoya.jp/?p=116
プロジェクトtestのソース
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;
using System.Diagnostics;
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// データ接続
private void button1_Click(object sender, EventArgs e)
{
string dbConnectionString = "Data Source=E:\\Sample.db";
using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString))
{
try
{
cn.Open();
MessageBox.Show("接続できました。", "タイトル", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "タイトル", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
// データの追加
private void button2_Click(object sender, EventArgs e)
{
string dbConnectionString = "Data Source=E:\\Sample.db";
using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString))
{
cn.Open(); //←ここで例外発生(?)
using (SQLiteTransaction trans = cn.BeginTransaction())
{
SQLiteCommand cmd = cn.CreateCommand();
// インサート文
cmd.CommandText = "INSERT INTO Sample (Name, Age) VALUES (@Name, @Age)";
// パラメータのセット
cmd.Parameters.Add("Name", System.Data.DbType.String);
cmd.Parameters.Add("Age", System.Data.DbType.Int64);
// データの追加
cmd.Parameters["Name"].Value = "田中";
cmd.Parameters["Age"].Value = 25;
cmd.ExecuteNonQuery();
cmd.Parameters["Name"].Value = "高橋";
cmd.Parameters["Age"].Value = 30;
cmd.ExecuteNonQuery();
// コミット
trans.Commit();
}
}
}
// データの取得
private void button3_Click(object sender, EventArgs e)
{
string dbConnectionString = "Data Source=E:\\Sample.db";
using (SQLiteConnection cn = new SQLiteConnection(dbConnectionString))
{
cn.Open();
SQLiteCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT * FROM Sample";
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Debug.WriteLine("名前:" + reader["Name"].ToString());
Debug.WriteLine("年齢:" + reader["Age"].ToString());
}
}
cn.Close();
}
}
}
}
また初歩的な質問になりますが、接続先のDBを指定する際のURL的な記述("Data Source=E:\\Sample.db")について、「"DataSource=./Sample.db"」のようにファイルを指定する書き方ではダメなのでしょうか?
E:ドライブにDBがある訳では無いのですが、どのように記述すればいいのか分かりません。
このURL(?)の書き方もご教授してもらえると幸いです。
以下に環境を列挙します、よろしくお願いします。
<開発環境>
●Microsoft Visual C# 2010 Express
●.Net Framework 4.0
●System.Data.SQLite x86-2010.1.0.96.0(.Net Framework 4.0用)
●Sample.dbはDB Browser for SQLiteを使用して作成したものです、レコードはありません。
●DBのディレクトリ

●DBの内容

ちなみに"Data Source=./Sample.db"として実行した場合、接続は出来ましたがデータ追加のボタンをクリックすると「SQLiteExceptionはハンドルされませんでした。」となり処理が止まってしまいました。
また"Data Source=E:\\Sample.db";と指定して実行するとデータベースへ接続する時点でunable to open database fileとエラーが表示されました。
何故かはわかりません。。。