You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#操作MySQL无法将从单表提取的UserID插入另一表如何解决

问题原因

  • 核心问题:你构造完插入操作的MySqlCommand对象cmd3后,没有调用执行方法ExecuteNonQuery(),插入SQL语句根本没有提交到MySQL运行,自然不会有数据写入表中。
  • 次要问题:MySqlDataReader在打开状态下会独占当前数据库连接,你在未关闭idread的情况下直接用同一个连接运行插入命令,即使补了执行方法也可能触发连接占用异常。
  • 潜在风险:所有数据库相关对象(连接、Command、DataReader)都没有做资源释放,容易引发连接泄漏、资源占用问题。

修复方案

推荐用using语法自动释放资源,同时补全插入命令的执行逻辑、提前关闭DataReader,修正后代码如下:

// using会自动在代码块结束后释放对象资源,无需手动关闭连接/读取器
using MySqlConnection con = new MySqlConnection(connectionstr);
con.Open();    
string selectIdSql = "SELECT UserID FROM login WHERE username =@U";
using MySqlCommand cmd2 = new MySqlCommand(selectIdSql, con);
cmd2.Parameters.AddWithValue("@U", username);
using MySqlDataReader idread = cmd2.ExecuteReader();
string id = null;
// 把Read判断合并到条件里,避免无数据时读取字段报错
if (idread.HasRows && idread.Read()) 
{
    id = idread.GetString(0);
}
// 主动关闭DataReader释放连接占用
idread.Close(); 

if (!string.IsNullOrEmpty(id))
{
    string insertSql = "INSERT INTO managementtest.fulldetails(UserID) VALUES(@I);";
    using MySqlCommand cmd3 = new MySqlCommand(insertSql, con);
    cmd3.Parameters.AddWithValue("@I", id);
    // 调用ExecuteNonQuery才会实际执行插入SQL,返回值是受影响的行数
    int affectedRows = cmd3.ExecuteNonQuery();
    if (affectedRows > 0)
    {
        MessageBox.Show("Detail Profile Created. User ID # " + id , "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else
    {
        MessageBox.Show("写入数据失败,请检查数据库配置", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

内容的提问来源于stack exchange,提问作者Mirza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:27:04