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

ASP.NET C# Web应用中MySQL数据库数据插入失败求助

问题分析与解决方案

兄弟,我一眼就瞅出你代码里的几个核心问题,这就是数据没插入的根源:

1. 压根没执行SQL命令

你创建了MySqlCommand对象、写了SQL语句,但从来没调用执行命令的方法!像插入、更新这类非查询操作,必须调用ExecuteNonQuery()才能让数据库执行你的指令。你现在只是把命令准备好了,却没给数据库发“执行”的信号。

2. 连接关闭时机完全错了

你刚打开连接、定义完命令就立刻关闭了连接,这时候命令还没来得及执行呢!得等命令执行完再关闭连接,更稳妥的是用using语句自动管理连接生命周期,避免手动操作出错。

3. 存在致命的SQL注入风险

直接把TextBox1.Text拼进SQL语句里,不仅容易被黑客利用SQL注入攻击,要是用户输入里有单引号这类特殊字符,还会直接导致SQL语法错误。必须用参数化查询解决这个问题。

4. 没有异常捕获逻辑

现在哪怕代码出了错,你也看不到任何错误提示,根本没法排查问题。


修正后的 testing.aspx.cs 代码

using System;
using MySql.Data.MySqlClient;
using System.Data;

namespace CricketAnalysis2
{
    public partial class testing : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            // 使用using语句自动管理连接,无需手动关闭
            using (MySqlConnection con = new MySqlConnection(@"Data Source=localhost;port=3306;Initial Catalog=cricdb;User Id=root;password=''"))
            {
                try
                {
                    con.Open();
                    // 参数化查询,彻底避免SQL注入
                    string sql = "INSERT INTO drug VALUES (@DrugName)";
                    using (MySqlCommand cmd1 = new MySqlCommand(sql, con))
                    {
                        // 添加参数并赋值
                        cmd1.Parameters.AddWithValue("@DrugName", TextBox1.Text);
                        // 执行SQL命令,返回受影响的行数
                        int rowsAffected = cmd1.ExecuteNonQuery();
                        
                        // 可选:给用户反馈插入结果
                        // if (rowsAffected > 0)
                        // {
                        //     Label1.Text = "数据插入成功!";
                        // }
                    }
                }
                catch (Exception ex)
                {
                    // 捕获异常,方便排查问题(可以把信息显示在页面或日志里)
                    // Label1.Text = "插入失败:" + ex.Message;
                }
                // using块结束后,连接会自动释放,不用手动调用con.Close()
            }
        }
    }
}

额外注意事项

  • 确认本地MySQL服务正在运行,端口3306正确,数据库cricdb存在,且drug表的列结构和你插入的字段匹配(比如表只有一个字符串类型列,或者插入的列顺序和表定义一致)。
  • 如果drug表有多列,一定要在INSERT语句里指定列名,比如INSERT INTO drug (drug_name) VALUES (@DrugName),避免因列顺序不匹配导致的隐藏问题。
  • 测试时可以在catch块里把异常信息显示出来,这样如果还有问题,能直接看到错误原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:18:11