Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动递增主键的SQLite表_C#_Sqlite - Fatal编程技术网

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列主键,以避免重复值?