a^0^ 2024-05-06 10:47 采纳率: 0%
浏览 5

asp.net突然不能正常使用mysql,之前都可以正常使用

asp.net程序,用c#写的代码,与mysql的连接没有用到EF,直接用代码方式连接,数据库在本地,地址是localhost,连接账户是root,权限都有。
本来程序一直运行良好,数据库可读可写,在某次再次打开页面时,发现无法取到数据,也无法修改数据,但是可以插入数据。在这之前没有改过代码,也没有更改过任何设置。
而且程序中用于查询的sql语句,直接在mysql中运行是可以查出数据的
求问各位,这个可能是什么原因呢?
重点是没有任何改变,突然就不能使用了,完全不清楚是哪里的问题

附上程序进行查询操作时的mysql日志

2024-05-05T08:24:10.749903Z       24 Connect    root@localhost on cus using TCP/IP
2024-05-05T08:24:10.762196Z       24 Query    SELECT @@max_allowed_packet, @@character_set_client, 
        @@character_set_connection, @@license, @@sql_mode, @@lower_case_table_names, @@autocommit
2024-05-05T08:24:10.772519Z       24 Query    SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP())
2024-05-05T08:24:10.774321Z       24 Query    SHOW COLLATION
2024-05-05T08:24:10.780852Z       24 Query    SET NAMES utf8
2024-05-05T08:24:10.781584Z       24 Query    SHOW WARNINGS
2024-05-05T08:24:10.784638Z       24 Query    SET character_set_results=NULL
2024-05-05T08:24:10.785510Z       24 Init DB    cus
2024-05-05T08:24:10.786799Z       24 Query    select *from cus where  FIND_IN_SET(loginid,'VTEyMzQ1')
2024-05-05T08:24:10.804623Z       24 Quit    

程序中调用的部分

return MySqlHelper.GetDataTable("select *from cus_back where  FIND_IN_SET(loginid,'" + loginid + "');");
//cus_back是表名



public static DataTable GetDataTable(string cmdText, params MySqlParameter[] commandParameters)
        {
            MySqlCommand cmd = new MySqlCommand();
            MySqlConnection conn = new MySqlConnection(cnn);
            try
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, commandParameters);
                MySqlDataAdapter adapter = new MySqlDataAdapter();
                adapter.SelectCommand = cmd;
                DataTable ds = new DataTable();

                adapter.Fill(ds);
                cmd.Parameters.Clear();
                conn.Close();
                return ds;                //这里的ds就是空的了
            }
            catch (Exception e)
            {
                throw e;
            }
        }
  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-06 10:47
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,您的 ASP.NET 应用程序突然无法从 MySQL 数据库中获取数据,但仍然可以插入数据。这可能是由于多种原因导致的,包括但不限于权限问题、SQL 查询错误、网络连接问题、数据库服务器状态等。让我们一步步排查这个问题。

    首先,确认以下几个方面:

    1. 检查数据库连接字符串是否正确:确保在代码中的数据库连接字符串(cnn)指向正确的MySQL服务器地址、端口、用户名、密码以及数据库名称。如果数据库在本地,地址通常是 localhost 或者 127.0.0.1

    2. 权限检查:确认用户账户拥有执行SELECT操作的权限。在MySQL命令行工具中,尝试登录并执行一些查询,看看是否有权限问题。

    3. 确保查询语句没有问题:既然在MySQL中执行相同查询可以得到结果,那么问题可能不在于 SQL 语句本身。不过为了保险起见,您可以尝试将查询语句硬编码到代码中,而不是通过字符串拼接的方式,防止潜在的SQL注入风险。

    4. 检查网络连接:确保应用程序能够正常访问MySQL服务器。可以在命令行中尝试 telnet 或者 ping 服务器地址看是否能连通。

    5. 数据库服务器状态:确保MySQL服务正在运行,并且没有因为资源耗尽或其他原因而被关闭。

    6. 防火墙设置:检查防火墙设置,确保允许ASP.NET应用连接到MySQL服务器。

    7. 数据库缓存:有时候数据库查询缓存可能会导致这样的问题,重启数据库服务器可以清除缓存。

    8. 数据库引擎:确认使用的存储引擎(InnoDB或MyISAM)支持事务,对于SELECT操作来说,InnoDB通常更可靠。

    针对代码部分,这里提供了一个优化过的版本,包括硬编码查询语句,以及处理异常的方式:

    using System.Data;
    using MySql.Data.MySqlClient;
    
    public static DataTable GetDataTable(string loginid)
    {
        string cmdText = $"SELECT * FROM cus_back WHERE FIND_IN_SET(loginid, '{loginid}')";
        
        MySqlConnection conn = new MySqlConnection(cnn);
        MySqlCommand cmd = new MySqlCommand(cmdText, conn);
    
        try
        {
            conn.Open();
            MySqlDataReader reader = cmd.ExecuteReader();
            
            DataTable ds = new DataTable();
            ds.Load(reader);
            
            reader.Close();
            return ds;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error executing query: {ex.Message}");
            return null; // 返回空表或抛出异常,取决于业务需求
        }
        finally
        {
            if (conn != null && conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
    }
    

    如果您按照上述步骤还是无法解决问题,建议您检查一下数据库服务器的日志文件,寻找更多的线索。同时,您也可以考虑临时开启更高的MySQL日志级别,以便收集更多调试信息。

    如果问题依然存在,请提供更多信息,例如数据库服务器的版本、操作系统、防火墙设置等,以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月6日
  • 创建了问题 5月6日

悬赏问题

  • ¥15 STM32F103C8T6使用标准库stm32f10x.h驱动ws2812
  • ¥20 我是数控机床电气工程师,主要是做840DSL与one,请问如何自学
  • ¥20 显示器休眠后重新唤醒出现蓝屏,蓝屏代码为DRIVER-POWER.STATE-FAILURE
  • ¥20 alt+tab怎么恢复到以前的模式
  • ¥15 来一个会抓包app支付链接的
  • ¥15 MMdetection安装
  • ¥15 STM32U535系列stop3模式进入和RTC唤醒
  • ¥15 如何提取全民K歌没下载过但播放过很多次的音频?
  • ¥15 树莓派运行detect.py
  • ¥15 pdfplumber提起文本内容如何过滤水印内容