【发布时间】:2015-08-13 17:49:56
【问题描述】:
我是一名职业高中的学生和新手程序员.. 我在插入查询中使用循环有一些问题.. 我有两个表,Book 和 Book_detail,与外键链接,我想将数据保存到两个表中,问题是每次我添加一本书时,我都有一个名为 copy_txt 的文本框,我的想法是我想保存book_detail 表中相同的 book_id 和相同的 location_id 但不同的 boookdetail_id 与我在copys_txt中插入的数量一样多。为了实现这一点,我尝试使用 for 循环,但我给了我错误
主键的重复条目
,这是我的完整代码
int copies = Convert.ToInt32(copies_txt.Text);
int i;
string constring = "datasource=localhost;port=3306;username=root;password=root";
string Query = "insert into simbada_perpustakaan.book(book_id,title,release_date,genre,author,copies,create_by,create_date) values ('" + this.book_id.Text + "','" + this.title_txt.Text + "','" + this.time.Text + "','" + this.genre_txt.Text + "','" + this.author_txt.Text + "','" + this.copies_txt.Text + "','" + this.username_lbl.Text + "','" + DateTime.Now.ToString("yyyy/MM/dd/hh/mm/ss") + "') ; ";
string Query2 = "insert into simbada_perpustakaan.book_detail(id_bookdetail,book_id,location_id) values('" + Guid.NewGuid() + "','" + this.book_id.Text + "','" + this.textBox1.Text + "') on duplicate key update id_bookdetail=(id_bookdetail=('"+Guid.NewGuid()+"'))";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
MySqlCommand cmdDataBase2 = new MySqlCommand(Query2, conDataBase);
MySqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDataBase.ExecuteReader();
conDataBase.Close();
for (i = 0; i <= copies; i++)
{
conDataBase.Open();
myReader = cmdDataBase2.ExecuteReader();
conDataBase.Close();
}
MessageBox.Show("saved");
while (myReader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
谁能指出我的错误...谢谢。
【问题讨论】:
-
在循环内多次插入查询 2。它的第一个值是 Guid.NewGuid() 这将是一个主键,你在循环之外分配它。所以总是相同的值..所以它会违反主键规则\
-
哦...好的,谢谢,如果问的不是太多,您能提供一些解决方案吗?
-
在那之前告诉我第二个表中是否存在相同的 GUID 你想做什么? bcos 在第二个查询中我可以看到
on duplicate -
好吧,我不知道这是否是正确的查询,但这是目标......如果 GUID 已经存在于 book_detail 表中,我希望系统创建新的 GUID 并继续插入下一个值...
-
好的理解那么你应该将查询放在循环中