C# 自动递增主键的SQLite表
主要问题是,我在尝试插入数据项时出错 不自动递增主键 表格创建:C# 自动递增主键的SQLite表,c#,sqlite,C#,Sqlite,主要问题是,我在尝试插入数据项时出错 不自动递增主键 表格创建: SQLiteConnection _sqliteCon = new SQLiteConnection(_connectStr); _sqliteCon.Open(); string query5 = "CREATE TABLE Merkmal(MerkmalID INT PRIMARY KEY NOT NULL, "; query5 += "MerkmalName_FR TEXT);"; SQLi
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();
这似乎效果不错
现在插入:
我想这就是我犯错误的地方
一些值得注意的事情:
我尝试了一点也不重视。使用硬编码值
我在尝试插入时遇到NOTNULL异常错误
创建或插入表以使其自动递增主键的正确方法是什么
提前感谢各位。将MerkmalID INT主键NOT NULL更改为MerkmalID INTEGER主键
SQLite中的大多数表都有一个rowid列,别名为oid和_rowid。通过将列声明为整数主键而不是INT、BIGINT等,即使它们引用相同的类型,该列也会成为rowid的别名
插入省略行或空rowid时,SQLite会为您选择一个唯一的ID
另请参见:将MerkmalID INT主键NOT NULL更改为MerkmalID INTEGER主键
SQLite中的大多数表都有一个rowid列,别名为oid和_rowid。通过将列声明为整数主键而不是INT、BIGINT等,即使它们引用相同的类型,该列也会成为rowid的别名
插入省略行或空rowid时,SQLite会为您选择一个唯一的ID
另请参见:您可以创建一个表示db表的类,并将该表添加到db中 创建表类
[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>();
您可以创建一个表示db表的类,并将该表添加到db中 创建表类
[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>();
您的问题是INT关键字。改为使用整数,它将按预期工作 所以,正确的代码应该是:创建表MerkmalMerkmalID INTEGER主键NOTNULL 信不信由你,这和只说INT不同,我不知道为什么
编辑:我已经尝试过这个方法,并且我能够重现这个问题,指定INTEGER可以正常工作。您的问题是INT关键字。改为使用整数,它将按预期工作 所以,正确的代码应该是:创建表MerkmalMerkmalID INTEGER主键NOTNULL 信不信由你,这和只说INT不同,我不知道为什么 编辑:我已经尝试过这个方法,并且我能够重现这个问题,指定INTEGER按预期工作。检查SQLite常见问题解答中的。声明为整数主键的列将自动递增。在您的情况下,您将定义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;对于每个打开的连接
更多详细信息请参见上述常见问题解答。查看SQLite常见问题解答中的。声明为整数主键的列将自动递增。在您的情况下,您将定义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;对于每个打开的连接
更多详情请参见上述常见问题解答。我来试一试。谢谢,我要试一试。谢谢。插入您建议的方式不起作用。只获取ID字段中的空值。没有自动增量。我刚才提到了你的文章。是的,你的答案是完美的。但还是。。。无效。插入您建议的方式无效。只获取ID字段中的空值。没有自动增量。我刚才提到了你的文章。是的,你的答案是完美的。但还是。。。不起作用。有趣的方法,将在将来参考!有趣的您将如何生成非int或varchar列主键,以便我们没有重复的值?有趣的方法,将在将来参考!有趣的如何生成非int或varchar列主键,以避免重复值?