曈筱 2024-05-17 16:51 采纳率: 0%
浏览 28

c#语言连接MYSQL后,查询语句不能正确执行

使用c#语言进行mysql数据库数据查询时出现了一些问题:
连接成功但是查询不到数据,但是将在调试窗口解析出来的mysql查询语句输入到命令行中却可以正确执行。

    bool MySqlSearch()
    {
        // 打开连接(如果处于关闭状态才进行打开)
        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        // 创建要查询的MySQL语句
        String sqlSelect = "select verify from web_parts_parts where verify = '" + arr[7] +"';";
        // 创建用于实现MySQL语句的对象
        MySqlCommand mySqlCommand = new (sqlSelect, con);  
        MySqlDataReader mdr = mySqlCommand.ExecuteReader();  // 执行MySQL语句,接收查询到的MySQL结果
        if(mdr.Read()) { mdr.Close(); return true; }
        else { mdr.Close(); return false; }
    }

img

img

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-17 16:53
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您提问的目的是解决在使用C#语言连接MySQL数据库进行数据查询时遇到的问题。具体来说,您在C#代码中构建了一个查询语句,但是查询不到数据,而同样的查询语句在MySQL命令行中却可以正确执行。

    图片内容

    1. 第一张图片显示了您在C#代码中构建的查询语句和执行查询的过程。它还显示了一个错误提示,指出在执行查询时出现了问题。
    2. 第二张图片显示了在MySQL命令行中直接执行相同查询语句的结果,查询成功并返回了数据。

    问题出现原因

    问题可能出现的原因有几个:

    • 字符串拼接错误:在您的C#代码中,查询字符串是通过拼接得到的,可能存在字符串拼接错误,导致查询语句格式不正确。
    • 字符转义:在您的查询语句中,verify字段的值包含单引号('),这可能需要进行转义,否则会导致SQL语句执行出错。
    • 变量值问题:变量arr[7]的值可能不是您预期的值,或者在拼接时出现了问题。

    问题解决方案

    为了解决这个问题,您需要确保查询语句在C#中正确地拼接,并且正确处理任何特殊字符。以下是修改后的代码示例:

    bool MySqlSearch(string verifyValue)
    {
        // 打开连接(如果处于关闭状态才进行打开)
        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        // 确保verifyValue是安全的,并且已经进行了适当的转义
        string safeVerifyValue = verifyValue.Replace("'", "''"); // 转义单引号
        // 创建要查询的MySQL语句
        string sqlSelect = $"select verify from web_parts_parts where verify = '{safeVerifyValue}';";
        // 创建用于实现MySQL语句的对象
        using (MySqlCommand mySqlCommand = new MySqlCommand(sqlSelect, con))
        {
            using (MySqlDataReader mdr = mySqlCommand.ExecuteReader())
            {
                if (mdr.Read())
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    }
    

    提供代码

    上述代码中,我使用了Replace方法来转义所有的单引号,并且使用了using语句来确保资源的正确释放。

    代码运行方式

    您需要在具有MySQL数据库访问权限的环境中运行这段代码。代码应该在C#环境中编译和执行,例如Visual Studio。

    代码预期运行结果

    如果verifyValue参数正确地传递给了MySqlSearch方法,并且数据库连接设置正确,那么代码应该能够成功执行查询并返回预期的布尔值。

    推荐相关链接

    请注意,您应该始终使用参数化查询来防止SQL注入攻击,但在您提供的代码片段中,我为了简单起见没有展示这一点。在实际应用中,请考虑使用参数化查询。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月17日