db ファイルが埋め込まれている場合、アクセスして行を追加/削除することはできません。ビルド アクションを Embedded Resource に変更したのはなぜですか? コンテンツとして配置する方がよいため、db は exe とは別のファイルであり (ただし、同じディレクトリにあります)、db ファイルへのパスを作成します (つまり、Application.StartupPath を使用します)。
とにかく、組み込みとして設定する場合は、実行時にデータベースを抽出し、使用する前にどこかに保存する必要があります。
埋め込みリソースからファイルを抽出できるメソッドを次に示します (もちろん、ファイル名を変更するか、引数として渡す必要があります)。
private void ExtractFromAssembly()
{
string strPath = Application.LocalUserAppDataPath + "\\MyFile.db";
if (File.Exists(strPath)) return; // already exist, don't overwrite
Assembly assembly = Assembly.GetExecutingAssembly();
//In the next line you should provide NameSpace.FileName.Extension that you have embedded
var input = assembly.GetManifestResourceStream("MyFile.db");
var output = File.Open(strPath, FileMode.CreateNew);
CopyStream(input, output);
input.Dispose();
output.Dispose();
System.Diagnostics.Process.Start(strPath);
}
private void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[32768];
while (true)
{
int read = input.Read(buffer, 0, buffer.Length);
if (read <= 0)
return;
output.Write(buffer, 0, read);
}
}
ファイルは、ユーザー ディレクトリのローカル アプリケーション パスにコピーされます。そうしないと、アプリケーションが起動するたびにdbファイルが上書きされるためです(exeのクリーンなdbパッケージで上書きされます)。