2012-07-28 50 views
0

我写插入一个文本数据此C#代码到我的数据库表:SQLite的在C#中没有这样的表

SQLiteConnection con = new SQLiteConnection("Data Source=tDB1.sqlite;Version=3;"); 
string q1 = "INSERT INTO tMembers(mName) VALUES(?)"; 

SQLiteCommand cmd1 = new SQLiteCommand(q1, con); 
cmd1.Parameters.AddWithValue("@mName", txtName.Text); 

con.Open(); 
cmd1.ExecuteNonQuery(); 
con.Close(); 

我我tDB1.sqlite复制到我的程序文件夹和SQLite中创建tMembers表。

当我运行我的程序,程序调试器显示“” cmd1.ExecuteNonQuery();“”行,显示对我说:SQLite的错误没有这样的表

可以在任何帮助我吗? 谢谢。

+0

可能是一个语法错误? 'INSERT'语句中'tMembers'和'(mName)'之间是否需要一个空格? – Dai 2012-07-28 11:33:02

+0

尝试确保数据库位于th可执行文件的相同文件夹中,而不仅仅是程序文件夹中。 – 2012-07-28 11:40:55

回答

0

对于仅仅基于当前目录的文件而言,它有点弱。如果您确定数据库被精确地放置在可执行文件的同一目录(即从Visual Studio $ projectdir$\bin\debug调试时可以强制路径,如下面的代码:

SQLiteConnection con = new SQLiteConnection(string.Format("Data Source={0};Version=3;" 
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"tdb1.sqlite")) 
    ); 
+0

“对于仅基于当前目录的文件而言,弱一点。”处理数据库的最佳方式是什么?谢谢 – ramin 2012-07-28 18:09:55

+0

@ramin我所展示的是一个不错的选择,我使用所有的路径,其中的exe文件名+ db文件名。 – 2012-07-28 18:49:25

0

更改命令字符串

string q1 = "INSERT INTO tMembers(mName) VALUES(?)"; 

string q1 = "INSERT INTO tMembers(@mName) VALUES(?)"; 

没有必要保留对应于列名,但在执行时,它必须与ARGS的名字相同整个命令。有关这方面的更多信息,您可以在谷歌搜索“PL/SQL”。

此外,您是否使用“VALUES(?)”执行此命令?我不确定这是否可行,如果没有NOT NULL约束,则可以执行INSERT INTO tMembers(@mName) DEFAULT VALUES