我正在尝试将一些数据插入到本地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 create table
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;";
答案 0 :(得分:1)
如果id是autoincremental,则无需在insert
中使用它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个独特的密钥,例外情况是,如果你插入已经在db中的表 hnummer 或 serienummer 或 olcnummer 那么你会有例外。请不要你的关键是3个不同。所以你应该确保db
中不存在任何一个如果你需要它是3列中的一个键,我想也许你需要但我不是那么,它应该是
UNIQUE KEY(hnummer,serienummer,olcnummer)
答案 1 :(得分:0)
您的ID是自动递增 MySQL自动分配序列号所以删除@ Volodymyr Bilyachat 表示
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", "");