如何在插入语句中从c#中的access数据库中获取下一个自动增量值

时间:2012-12-24 05:44:31

标签: c# ms-access-2007

我目前正在使用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();
    }
}

我读到如果Identity设置为true,则不必包含AutoNumber字段,不确定我是否设置了该方式。如何在运行SQL查询时使AutoNumber函数工作?

谢谢!

2 个答案:

答案 0 :(得分:1)

自动编号可以帮助您不必担心获取下一个值。 AutoNumber不应该在insert中提供任何问题,因为你没有使用它字段集,它会自动获得下一个值以便插入。

首先尝试

"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而不是自动编号,然后尝试

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

如果你以这种方式获得成功,那么你必须阅读更多关于自动编号的信息,你将很容易解决你的问题,如果你遇到这个问题,我愿意进一步提供帮助。

修改 发表评论:将您的Drop指定字段更改为Drop111Drop以外的其他字段。因为,Drop是SQL中的关键字。

答案 1 :(得分:0)

我相信您需要设置类似

的自动增量
ALTER TABLE MonsterDrops
   ALTER COLUMN ID AUTOINCREMENT(1001,1)

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