gpt4 book ai didi

C# MySQL id 列无法正常工作

转载 作者:行者123 更新时间:2023-11-29 00:20:16 24 4
gpt4 key购买 nike

我正在尝试将一些数据插入本地 MySQL 数据库。

一些字段有一个 UNIQUE 索引。

我数据库中的 ID 字段分配了 PRIMARY_KEY 和 AUTO_INCREMENT 索引。

当我想将数据添加到具有唯一索引的数据库时,它工作正常但在某些条件下..它确实添加了数据,但是..它只是继续计数。我想用这个解释的是,每当我将不正确的数据放入我的表单(重复条目)时,ID 字段就会继续计数。

即添加用户名;你好,id是1

添加用户名hi,id为2,但不添加到数据库

添加用户名再见,数据库中的Id是3(我的问题)

    private bool authenticateLaptop(string leerling, string laptop, string merk, string serienummer, string ruimte, string locatie, string status, string naam, string olcnummer, bool uitgifte)
{
using (MySqlConnection connection = new MySqlConnection(@"server=" + Settings.Default.databaseServer + ";username=" + Settings.Default.databaseUsername + ";password=" + Settings.Default.databasePassword + ";database=" + Settings.Default.databaseName))
{
connection.Open();
try
{
string query = null;
using (MySqlCommand command = new MySqlCommand(query, connection))
{
query = "INSERT INTO inventarisatie (hnummer, merk, serienummer, ruimte, locatie, status, inbezitvan, olcnummer, uitgifte) VALUES (@laptop, @merk, @serienummer, @ruimte, @locatie, @status, @inbezitvan, @olcnummer, @uitgifte)";
command.CommandText = query;
command.Parameters.AddWithValue("@laptop", laptop);
command.Parameters.AddWithValue("@merk", merk);
command.Parameters.AddWithValue("@serienummer", serienummer);
command.Parameters.AddWithValue("@ruimte", ruimte);
command.Parameters.AddWithValue("@locatie", locatie);
command.Parameters.AddWithValue("@status", status);
command.Parameters.AddWithValue("@inbezitvan", naam);
command.Parameters.AddWithValue("@olcnummer", olcnummer);
command.Parameters.AddWithValue("@uitgifte", uitgifte);
command.ExecuteNonQuery();
loadData();
return true;
}
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 1062:
if (ex.Message.Contains("hnummer"))
MessageBox.Show("Deze laptop staat al in de lijst");
if (ex.Message.Contains("serienummer"))
MessageBox.Show("Dit serienummer staat al in de lijst");
if (ex.Message.Contains("olcnummer"))
MessageBox.Show("Dit OLC nummer staat al in de lijst");
loadData();
break;
default:
MessageBox.Show(ex.Message);
break;
}
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
loadData();

}
}
return false;
}
}

SQL创建表

query = "DROP TABLE IF EXISTS `inventarisatie`;CREATE TABLE IF NOT EXISTS `inventarisatie` (`id` tinyint(4) NOT NULL AUTO_INCREMENT,  `merk` varchar(6) NOT NULL,  `serienummer` varchar(6) NOT NULL,  `hnummer` varchar(6) NOT NULL,  `ruimte` varchar(4) NOT NULL, `locatie` varchar(1) NOT NULL,  `status` char(1) NOT NULL,  `inbezitvan` varchar(20) NOT NULL,  `olcnummer` varchar(3) NOT NULL,  `uitgifte` tinyint(1) NOT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY (hnummer, serienummer, olcnummer)) ENGINE=InnoDB  DEFAULT CHARSET=latin1;";

最佳答案

如果 id 是自增的则不需要在插入中使用它

query = "INSERT INTO inventarisatie (hnummer, merk, serienummer, ruimte, locatie, status, inbezitvan, olcnummer, uitgifte) VALUES (@laptop, @merk, @serienummer, @ruimte, @locatie, @status, @inbezitvan, @olcnummer, @uitgifte)";      

然后删除

 command.Parameters.AddWithValue("@id", "");

更新:如我所见,您有 3 个唯一键,异常(exception)情况是,如果您插入表 hnummerserienummerolcnummer 已经在数据库中,那么您会有异常(exception)。请注意,您的 key 有 3 个不同。所以你应该确保它们都不存在于数据库中

如果你需要它是 3 列中的一个键,我想你可能需要,但我不习惯,它应该是

UNIQUE KEY (hnummer, serienummer, olcnummer)

关于C# MySQL id 列无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21302338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com