【问题标题】:MySql command to update info in C#在 C# 中更新信息的 MySql 命令
【发布时间】:2016-10-26 07:56:13
【问题描述】:

我正在从事一个个人项目,我想从我的数据库中获取客户的信息。但是,我一直失败。我有的sql命令:

 "SELECT * FROM `customer` WHERE `ID` =@_ID AND `Naam` LIKE '" + tbKlantZoeken.Text + "'AND `E-mail` =@_EMAIL AND `Telefoon` =@_TEL"

数据库连接正常,与数据库相关的另一个代码也在正常工作。所以我猜这是我的sql代码?如果没有,这是我使用它的代码:

//Get info

        db_connection();
        MySqlCommand cmdZoeken = new MySqlCommand();
        cmdZoeken.CommandText = "SELECT * FROM `customer` WHERE `ID` =@_ID AND `Naam` LIKE '" + tbKlantZoeken.Text + "'AND `E-mail` =@_EMAIL AND `Telefoon` =@_TEL";
        cmdZoeken.Parameters.AddWithValue("@_ID", _ID);
        cmdZoeken.Parameters.AddWithValue("@_EMAIL", _EMAIL);
        cmdZoeken.Parameters.AddWithValue("@TEL", _TEL);
        cmdZoeken.Connection = connect;
        MySqlDataReader tbZoeken = cmdZoeken.ExecuteReader();
        if (tbZoeken.Read())
        {
            connect.Close();
            return true;
        }
        else
        {
            return false;
        }
    }

其他部分:

//use code

        db_connection();
        string _ID = "ID";
        string _EMAIL = "EMAIL";
        string _TEL = "TEL";
        try
        {
            bool Z = Klant_zoeken(_ID, _EMAIL, _TEL);
            if (Z)
            {
                tbKResultaat.Text = _ID + " " + " " + _EMAIL + " " + _TEL;
            }
        }
        catch
        {
            throw;
        }

在这部分,当它失败时,“抛出”也不起作用。它只是崩溃了,但我认为这是另一个问题......

提前致谢!

【问题讨论】:

  • 尝试将cmdZoeken.Parameters.AddWithValue("@TEL", _TEL);改为cmdZoeken.Parameters.AddWithValue("@_TEL", _TEL);
  • 为什么除了“naam”之外的所有东西都使用参数?这是一个 sql 注入的乐趣和解析错误的可能来源。此外,如果您就代码无法正常工作而寻求帮助,请不要忘记告诉我们确切的错误消息。
  • @Steve 我得到的错误不相关。问题是我无法获得我想要获得的信息。我将 Tel 更改为 _Tel,并停止收到错误,但仍然没有信息
  • @Alex 谢谢!它阻止了它崩溃,所以我猜它有效吗?但主要问题仍然存在:它仍然没有显示任何信息
  • 您希望看到什么信息?您不会将 Reader 用于任何事情,而只是检查该行是否存在。

标签: c# mysql winforms


【解决方案1】:

请检查:- 您在某些单词之间缺少空格。还可以根据您的要求添加 % 标记。除非使用 as Naam` = tbKlantZoeken.Text 没有like

 "SELECT * FROM `customer` WHERE `ID` =@_ID AND `Naam` LIKE '" +  
 tbKlantZoeken.Text + "' AND `E-mail` =@_EMAIL AND `Telefoon` =@_TEL";

【讨论】:

  • 解决了无法连接的错误,但文本框中仍然没有信息。
  • 请检查您的 sql 查询。正如我所说,请使用正确的方式
【解决方案2】:

试试这个 /获取信息

    db_connection();
    MySqlCommand cmdZoeken = new MySqlCommand();
    cmdZoeken.CommandText = "SELECT * FROM customer WHERE ID =@_ID AND Naam LIKE '" + tbKlantZoeken.Text + "%'AND E-mail =@_EMAIL AND Telefoon =@_TEL";
    cmdZoeken.Parameters.AddWithValue("@_ID", _ID);
    cmdZoeken.Parameters.AddWithValue("@_EMAIL", _EMAIL);
    cmdZoeken.Parameters.AddWithValue("@TEL", _TEL);
    cmdZoeken.Connection = connect;
    MySqlDataReader tbZoeken = cmdZoeken.ExecuteReader();
    if (tbZoeken.Read())
    {
        connect.Close();
        return true;
    }
    else
    {
        return false;
    }
}

【讨论】:

    【解决方案3】:

    您应该从 Table_name 和 Column_name 中删除单个 quates-

    试试这样的 select 语句-

      cmdZoeken.CommandText = "SELECT * FROM customer WHERE ID =@_ID AND Naam LIKE '%" + tbKlantZoeken.Text + "%'AND E-mail =@_EMAIL AND Telefoon =@_TEL";
    

    【讨论】:

    • 当我按照你说的做时,它给了我这个错误:'where 子句'中的未知列'E'。我猜那是电子邮件中的“E”?
    • 使用 [E-mail] 代替 E-mail。
    • 这是正确的语法。请使用这个 cmdZoeken.CommandText = "SELECT * FROM customer WHERE ID =@_ID AND Naam LIKE '%'+" + tbKlantZoeken.Text + "+'%' AND [E-mail] =@_EMAIL AND Telefoon =@_TEL" ;
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多