主要问题是我在尝试插入数据条目时遇到错误。
(不自动递增主键)
表格创建:
SQLiteConnection _sqliteCon = new SQLiteConnection(_connectStr);
_sqliteCon.Open();
string query5 = "CREATE TABLE Merkmal(MerkmalID INT PRIMARY KEY NOT NULL, ";
query5 += "MerkmalName_FR TEXT);";
SQLiteCommand command5 = new SQLiteCommand(query5, _sqliteCon);
command5.ExecuteNonQuery();
_sqliteCon.Close();
这似乎工作正常。
现在为插入: ( 我认为这是我的错误发生的地方 )
SQLiteConnection _sqliteCon = new SQLiteConnection(_connectStr);
_sqliteCon.Open();
SQLiteCommand insertSQL = new SQLiteCommand("INSERT INTO Merkmal(MerkmalID,MerkmalName_FR) VALUES (?,?)",_sqliteCon);
insertSQL.Parameters.Add(new SQLiteParameter("param1",null));
insertSQL.Parameters.Add(new SQLiteParameter("param2",SomeString));
insertSQL.ExecuteNonQuery();
_sqliteCon.Close();
值得注意的一些事情:
我试图根本没有放价值。 (使用硬编码值)
尝试插入时,我收到了非null异常错误。
创建或插入表格的正确方法是什么,以便自动递增主键
先谢谢你们。
答案 0 :(得分:5)
将MerkmalID INT PRIMARY KEY NOT NULL
更改为MerkmalID INTEGER PRIMARY KEY
SQLite中的大多数表都有rowid
列(也称为oid
和_rowid_
)。通过将列声明为INTEGER PRIMARY KEY
(但不是INT
,BIGINT
等,即使它们引用相同类型),该列也会成为{{1}的别名}。
当您插入省略行或rowid
时,SQLite会为您选择一个唯一的ID。
答案 1 :(得分:3)
您可以创建一个表示数据库表的类,并在数据库中添加该表。
创建表类
[Table("WordT")]
public class WordT
{
private int _WId;
[Column("WId")]
[PrimaryKey]
[NotNull]
[AutoIncrement]
public int WId
{
get { return _WId; }
set
{
if (_WId != value)
{
_WId = value;
}
}
}
private string _Word;
[Column("Word")]
public string Word
{
get { return _Word; }
set
{
if (_Word != value)
{
_Word = value;
}
}
}
}
在数据库中添加表
SQLiteConnection c = new SQLiteConnection(pth);
var t = c.CreateTable<WordT>();
答案 2 :(得分:1)
您的问题是INT关键字。改为使用INTEGER,它将按预期工作。
因此,正确的代码是:CREATE TABLE Merkmal(MerkmalID INTEGER PRIMARY KEY NOT NOT NULL ...
信不信由你只是说INT
(我不太清楚为什么会这样)。
编辑:我试过这个,我能够重现这个问题,指定INTEGER按预期工作。
答案 3 :(得分:-1)
检查SQLite常见问题解答中的How do I create an AUTOINCREMENT field?。声明为INTEGER PRIMARY KEY的列将自动递增。在您的情况下,您将定义您的PK列,如:
MerkmalID INT PRIMARY KEY
并插入其中:
INSERT INTO Merkmal VALUES (NULL,'SAMPLE MerkmalName')
此外,您还会考虑包含在连接字符串中的参照完整性:
string connectionString =
String.Format(@"Data Source={0};Foreign Keys=ON", dataDataAccessPath);
每个打开的连接都有和"PRAGMA foreign_keys = ON;"
。
此处提供更多详细信息:Does SQLite support foreign keys?在上述相同的常见问题解答中。