【问题标题】:Mysql in c# --> Find ID where Name isC#中的Mysql --> 查找名称所在的ID
【发布时间】:2016-08-11 16:23:14
【问题描述】:

我在 mysql 中有一个名为 Users 的表,它有 4 行。 ID、姓名、通行证、公司。

我尝试在 c# WPF 中创建一个应用程序来执行此操作:添加用户并提供必须提供的值,并且还必须提供他所属的公司。

现在,我需要做的是找到一种方法来提供公司名称并说:如果公司名称是 Google,则在字段 company 中的用户中放置 id 1

ID    Name

1     Google
2     Facebook
3     Instagram
4     etc_etc

代码是:

public bool AddUser(string userid, string username, string password, int companyId)
        {
            return ExecQuery("insert into users (id, name, pass, companyid) values(@id, @name, @pass, @cid)",
                cmd =>
                {
                    cmd.Parameters.AddWithValue("@id", userid);
                    cmd.Parameters.AddWithValue("@name", username);
                    cmd.Parameters.AddWithValue("@pass", password);
                    cmd.Parameters.AddWithValue("@cid", companyId);
                    return cmd;
                });
        }

        public bool AddCompany(string name)
        {
            return ExecQuery("insert into companies (name) values(@name)",
                cmd =>
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    return cmd;
                });
        }

【问题讨论】:

  • 那么问题是如何获取插入公司的ID?
  • 是的,用户写名字时如何获取插入公司的id。
  • 进行公司查询,否则您可能会弄乱您的数据。 “Acme Freight”在公司表中可能有很多行。另外,散列你的password
  • 你能告诉我怎么做吗?我确实对我的密码进行了哈希处理,但我会更改加密代码,因为它真的很糟糕。公共静态字符串 GenerateSHA512String(string inputString) { SHA512 sha512 = SHA512Managed.Create(); byte[] bytes = Encoding.UTF8.GetBytes(inputString); byte[] hash = sha512.ComputeHash(bytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i
  • 只要使用mysql内置的Password()函数即可。你的密码栏是 varchar(100) 还是 text。

标签: c# mysql


【解决方案1】:

假设公司名称是唯一的并且已从表中的值中选择,您可以更改查询以包含子查询以获取公司 ID。

 "insert into users (id, name, pass, companyid) 
  values(@id, @name, @pass, (select id from company where Name=@cid))"

如果公司名称不唯一,则返回多个值时,此查询将失败。

如果没有找到公司名称,如果companyid字段设置为NOT NULL则查询失败,否则输入null。

【讨论】:

    【解决方案2】:

    您可以通过预开发的MySQL命令LAST_INSERT_ID()获取最后插入的值

    您可以像这样在 SP 中获取最后插入 id:

    DECLARE LID int;
    SET LID = LAST_INSERT_ID();
    

    参考:Here

    【讨论】:

    • OP 想要插入公司 ID 值 - 如果这不是新添加的公司,那么这将不起作用。
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多