c# – 获取最后一次插入如果该行已存在,则Id返回0
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 获取最后一次插入如果该行已存在,则Id返回0,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1448字,纯文字阅读大概需要3分钟。
内容图文
我用的时候:
START TRANSACTION;
INSERT IGNORE INTO users (Name, ...) VALUES ('user1',..) ON DUPLICATE KEY UPDATE lastSeen=NOW();
SELECT LAST_INSERT_ID();
COMMIT;
当我从我的SQL客户端运行此查询时,我按预期获得最后插入的ID.
但是如果用户已经存在怎么办?(table uniquness).所以没有创建新的id.但是现在当我从我的SQL客户端运行相同的查询时,仍然按预期获得了id.
但!当我从我的C#代码运行它并使用mysql.reader查询我收到的结果时0.为什么?
如果不使用SELECT LAST_INSERT_ID(),我使用SELECT id FROM users ORDER BY id DESC LIMIT 1我再次得到正确的id.
编辑!
这与建议的主题不重复.在那个主题中答案说自动递增不是主键,这不是我的情况!另外,当我使用mysql客户端时,它确实返回正确的id!只有当我从我的c#代码运行它时才会出现问题!
我的C#代码:
using (var conn = new MySqlConnection(connString))
{
try
{
conn.Open();
var command = conn.CreateCommand();
command.CommandText = strSQL;
MySqlDataReader reader;
string result = "";
try
{
reader = command.ExecuteReader();
if (reader.Read())
result = reader[0].ToString();
}
catch (Exception ex)
{
throw new MySqlException("SQL Error: " + ex.ToString());
}
reader.Close();
return result;
}
}
解决方法:
我找到了一个解决方法,简单的CASE子句完成了这项工作:
START TRANSACTION;
INSERT IGNORE INTO users (Name, ...) VALUES ('user1',..) ON DUPLICATE KEY UPDATE lastSeen=NOW();
SELECT CASE WHEN LAST_INSERT_ID()=0 THEN (SELECT id FROM users WHERE Name = 'user1') ELSE LAST_INSERT_ID() END;
COMMIT;
现在万一用户存在,我们只是查询id,如果它不存在,LAST_INSERT_ID()会给我们正确的id
内容总结
以上是互联网集市为您收集整理的c# – 获取最后一次插入如果该行已存在,则Id返回0全部内容,希望文章能够帮你解决c# – 获取最后一次插入如果该行已存在,则Id返回0所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。