如何在插入语句中从访问数据库中获取下一个自动增量值

本文关键字:下一个 获取 访问 插入 语句 数据库 | 更新日期: 2023-09-27 17:49:18

我目前正在从c#编写的Windows窗体应用程序输入数据。我的数据库是一个Microsoft Access数据库。一切都很好,但我一直得到复制主键值的错误。我在网上找了一段时间,没有找到很多与我的问题有关的信息。

我当前的表设置如下:

Field Name     Data
-------------------
ID             AutoNumber
MonsterName    Text
Drop           Text
AmountDropped  Text

和我当前的SQL查询如下:

"INSERT INTO MonsterDrops (MonsterName, Drop, AmountDropped) VALUES ('" +
Monsters.SelectedCells[0].Value.ToString() + "','" + DropName + "'," + Amount + ")"

这给了我错误:" INSERT INTO语句中的语法错误"

我正在用这个函数执行查询:

private void executeNonQuery(string query)
    {
        //create a new connection and pass in config settings for it
        OleDbConnection db = new OleDbConnection(Properties.Settings.Default.DFUWDBConnectionString);
        try
        {
        //Open the DB
        db.Open();
            try
            {
            //create a new command object
            OleDbCommand command = new OleDbCommand();
            //set the command to be your query
            command.CommandText = query;
            //set the DB for the query to be performed on
            command.Connection = db;
            //execute the insert
            command.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
    finally
    {
        db.Close();
    }
}

我读到,如果身份设置为true,您不必包括自动编号字段,不确定我是否设置为这种方式。我怎么能得到自动号码功能的工作,而运行一个SQL查询??

谢谢!

如何在插入语句中从访问数据库中获取下一个自动增量值

自动编号使您不必为获取下一个值而烦恼。自动编号应该不会在插入中给你带来任何问题,因为你没有使用它的字段集,它会自动获取插入的下一个值。

你先试试

"INSERT INTO MonsterDrops (MonsterName, Drop, AmountDropped) VALUES 
('BOOGYMAN', 'BOOGERS', '1')";

然后试试这个

"INSERT INTO MonsterDrops (MonsterName, Drop, AmountDropped) VALUES
 ('" + Monsters.SelectedCells[0].Value.ToString() + "','" + DropName + "'
,'" + Amount + ")"'"

如果你在第二个中发现问题那么你得到的值就直接有问题了

否则,如果你在第一次查询中遇到问题,那么你应该尝试这种方法

将ID字段改为Number,而不是auto-number,然后尝试

"INSERT INTO MonsterDrops (ID,MonsterName, Drop, AmountDropped) VALUES 
(2222, 'BOOGYMAN', 'BOOGERS', '1')";

如果你以这种方式获得成功,那么你必须阅读更多关于自动编号的知识,你将很容易解决你的问题,如果你甚至在这个问题上遇到问题,我随时准备进一步帮助。

编辑从评论:更改您的Drop命名字段为Drop111Drop以外的东西。因为,Drop是SQL中的关键字。

我认为你需要设置autoincrement,比如

ALTER TABLE MonsterDrops
   ALTER COLUMN ID AUTOINCREMENT(1001,1)

基本上将1001替换为您的最后一个ID并且您希望将下一个插入增加1