SQLite错误:没有这样的表

时间:2012-12-18 15:08:29

标签: c# sqlite

我使用System.Data.SQLite来处理我的数据库。以下是我创建表的方法:

CREATE TABLE spare_samples (
    sampleId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    sampleNr INTEGER UNSIGNED UNIQUE NOT NULL,
    sampleName VARCHAR(255) UNIQUE NOT NULL COLLATE NOCASE,
    spareState VARCHAR(255) NULL,
    sides VARCHAR(255) NULL,
    notes TEXT,
    dispatch VARCHAR(32) NULL,
    ebayId VARCHAR(255) NULL
);

CREATE TABLE spare_sample_photo_examples (
    exampleId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    exampleType VARCHAR(32) NOT NULL,
    exampleImage VARCHAR(128) UNIQUE NOT NULL COLLATE NOCASE,
    exampleTitle VARCHAR(128) NULL,
    exampleDescr TEXT,
    exampleOrder INTEGER NOT NULL DEFAULT 0,
    sampleId INTEGER NOT NULL,
    FOREIGN KEY (sampleId)
        REFERENCES spare_samples(sampleId)
        ON UPDATE CASCADE ON DELETE CASCADE
);

要添加新行,我正在使用它:

SQLiteConnection conn = new SQLiteConnection(LoadForm.connString);
SQLiteCommand command = conn.CreateCommand();
command.CommandText = "Insert Into spare_sample_photo_examples (exampleType, exampleImage, exampleTitle, exampleDescr, exampleOrder, sampleId) values('"
                + spareSamplePhotoExampleToUpdate.exampleType + "', '"
                + spareSamplePhotoExampleToUpdate.exampleImage + "', '"
                + spareSamplePhotoExampleToUpdate.exampleTitle + "', '"
                + spareSamplePhotoExampleToUpdate.exampleDescr + "', "
                + spareSamplePhotoExampleToUpdate.exampleOrder + ", "
                + spareSamplePhotoExampleToUpdate.sampleId + "); Select last_insert_rowid();";
Clipboard.SetText(command.CommandText);
try
{
    conn.Open();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
}

try
{
    spareSamplePhotoExampleToUpdate.exampleId = Convert.ToInt16(command.ExecuteScalar());
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
}
finally
{
    if (conn.State.ToString() != "Closed")
    {
        conn.Close();
    }
}

而spareSamplePhotoExampleToUpdate是object的实例:

public class SpareSamplePhotoExample
{
    public int exampleId { get; set; }
    public string exampleType { get; set; }
    public string exampleImage { get; set; }
    public string exampleTitle { get; set; }
    public string exampleDescr { get; set; }
    public int exampleOrder { get; set; }
    public int sampleId { get; set; }
}

我实际上并不知道这个代码有什么问题,包括我和其他任何内容,但是当我从应用程序生成代码并在FF SQLite Manager中运行它时,它已成功执行。此外,我已经阅读了另一个类似的问题,但所有这些问题都与android和ios有关。

Insert Into spare_sample_photo_examples (exampleType, exampleImage, exampleTitle, exampleDescr, exampleOrder, sampleId) values('image', 'images\c438ldpuojpywln1.jpg', '', '', '0', '32'); Select last_insert_rowid();

非常感谢您的帮助。

注释:

此代码在开始时检查数据库:

SQLiteCommand command = conn.CreateCommand();
command.CommandText = "SELECT count( name ) FROM sqlite_master WHERE (type = 'table' AND name = 'cars')"
                + " OR (type = 'table' AND name = 'makes')"
                + " OR (type = 'table' AND name = 'models')"
                + " OR (type = 'table' AND name = 'spares')"
                + " OR (type = 'table' AND name = 'spare_brands')"
                + " OR (type = 'table' AND name = 'spare_samples')"
                + " OR (type = 'table' AND name = 'export_templates')"
                + " OR (type = 'table' AND name = 'users')"
                + " OR (type = 'table' AND name = 'user_meta')"
                + " OR (type = 'table' AND name = 'spare_sample_photo_examples')";
            if (Convert.ToInt16(command.ExecuteScalar().ToString()) != 10)
            {
                //something like exit with some stuff
            }

我的问题的确切更新。正如您所看到的,我在数据库中有另一个表,所以在我开始添加照片示例之前,所有功能都能正常工作。在我收到错误后,我无法做任何涉及数据库操作的事情。所有操作都返回相同的错误,但对于他们的表。

2 个答案:

答案 0 :(得分:1)

我有答案!我有连接选项表单,我可以选择要连接的数据库类型。其中一个参数是路径。我下次保存了它:

fDialog.FileName.Replace(Path.GetDirectoryName(Application.ExecutablePath) + "\\", "");

当数据库文件在app文件夹中时,路径看起来更干净。表单中有文件对话框,我可以在其中创建照片示例。你已经知道的下一个故事。应用程序开始在文件夹中搜索数据库文件,我打开了图片。小心相对路径。

答案 1 :(得分:0)

您的LoadForm.ConnString使用正确的帐户吗?如果您在sqlite管理器中以单向登录并在一个架构中创建表,但您的应用程序使用其他帐户/架构登录,则当前架构中的应用程序将找不到该表。