C# 如果电子邮件id和用户名不存在,请插入记录

C# 如果电子邮件id和用户名不存在,请插入记录,c#,mysql,C#,Mysql,我编写了这个插入查询: INSERT INTO tblUsers(FirstName, LastName, UserName, Password , EmailId, Created_Date, typeid) VALUES ('" + ObjUserProp.FirstName + "','" + ObjUserProp.LastName + "' ,'" + ObjUserProp.UserName + "','" + ObjUser

我编写了这个插入查询:

INSERT INTO tblUsers(FirstName, LastName, UserName, Password
                     , EmailId, Created_Date, typeid) 
VALUES ('" + ObjUserProp.FirstName + "','" + ObjUserProp.LastName + "'
       ,'" + ObjUserProp.UserName + "','" + ObjUserProp.Password + "'
       ,'" + ObjUserProp.EmailId + "','" + ObjUserProp.Created_Date + "'
       ," + ObjUserProp.TypeId + ")
在这方面,我需要检查用户名和电子邮件是否存在。如果不存在,则仅插入记录,否则返回false

INSERT INTO tblUsers(FirstName, LastName, UserName, Password 
                     , EmailId, Created_Date, typeid)  
SELECT ObjUserProp.FirstName    as Firstname,    <<-- note the keyword SELECT
      ObjUserProp.LastName      as lastname,
      ObjUserProp.UserName      as username,
      ObjUserProp.Password      as password,
      ObjUserProp.EmailId       as emailid,
      ObjUserProp.Created_Date  as created_date,
      ObjUserProp.TypeId        as typeid
FROM DUAL 
WHERE NOT EXISTS (
  SELECT 1 FROM tbluser u 
  WHERE u.username = ObjUserProp.UserName 
    AND u.Emailid = ObjUserProp.EmailId) 
LIMIT 1 

您必须将引号和+'放回查询中,但这是一般的想法。

两个查询有什么问题?首先,从username=和/或email=的用户中选择countid,如果计数为0,则执行插入。

虽然Microsoft SQL Server为SQL语句提供了if-NOT-EXIST选项,但如果您使用的是MYSQL,我建议对插入进行UTalize。。。关于重复密钥更新语法

在您的示例中,可以通过执行以下操作来完成此操作:

INSERT INTO tblUsers(FirstName, LastName, UserName, Password
                 , EmailId, Created_Date, typeid) 
VALUES ('" + ObjUserProp.FirstName + "','" + ObjUserProp.LastName + "'
   ,'" + ObjUserProp.UserName + "','" + ObjUserProp.Password + "'
   ,'" + ObjUserProp.EmailId + "','" + ObjUserProp.Created_Date + "'
   ," + ObjUserProp.TypeId + ") ON DUPLICATE KEY UPDATE id=id

您需要确保将emailId和用户名设置为表中的键。

或。亲爱的drive by downvoter,如果您必须进行downvote,请至少指定原因。问题很清楚,DB的设计是可疑的,因为它不含盐地存储未加密的密码。很可能之前有人问过几次,但在这种情况下,请用dup链接进行投票。如果用户不存在,则不会插入任何内容。@CodeCaster这正是OP所要求的,也是我希望代码所做的。请原谅我的法语,但是如果不存在,那么就只插入与之相反的记录吗?我已经写了:插入到tblUsersFirstName、LastName、用户名、密码、EmailId、创建日期、typeid值“+ObjUserProp.FirstName+”、“+ObjUserProp.LastName+”、“+ObjUserProp.UserName+”、“+ObjUserProp.Password+”,“+ObjUserProp.EmailId+”、“+ObjUserProp.Created_Date+”、+ObjUserProp.TypeId+不存在的位置从用户名=“+ObjUserProp.UserName+”和EmailId=“+ObjUserProp.EmailId+”的列表中选择*,请告诉我有什么问题it@user985225读我的答案,读你的评论,查看差异,然后问问自己这些差异的性质。问题是,为了一个查询就可以轻松完成的事情,您对DB服务器进行了两次ping。请轻松定义。对于一个快速阅读的人来说,你的SQL墙做了什么是绝对不清楚的,而两个简单的查询——一个选择查询和一个插入查询——也不能再清楚了。此外,您很可能不希望在一个查询中处理此问题,因为当select count返回1时,您可能希望显示某种错误消息。是的,这可以通过在执行查询后请求受影响的行数来实现,但对我来说,这更像是一种解决方法,而不是一个额外的查询。这取决于您正在执行的插入数量。我也不会在没有必要的情况下敲打数据库。如果客户端和服务器不在一台计算机上,则为Esp。