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

C#连接SQL Server数据未保存问题排查求助

排查C# Active Record模式写入SQL Server失败问题

先看你提供的代码,问题主要集中在C#的Save方法里,两个关键错误直接导致数据根本没被插入到数据库:

1. 完全没执行插入命令

你的Save方法仅仅是打开了数据库连接,但从来没调用command.ExecuteNonQuery()来执行INSERT语句!打开连接只是建立了和数据库的通信通道,真正触发SQL执行的步骤被彻底漏掉了。

2. SQL参数名不匹配

你写的INSERT语句里用的参数是@nom,但C#代码里添加的参数却是@nam——参数名完全对不上,就算你执行了命令,SQL Server也找不到对应的值,插入操作同样会失败。

另外还有几个可以优化的细节:

  • 用using语句自动管理SqlConnection和SqlCommand的生命周期,避免手动关闭连接时可能出现的疏漏
  • 捕获具体的SqlException,能帮你快速定位数据库层面的错误(比如主键重复、权限不足等)

修正后的C# Save方法代码

public bool Save()
{
    string strCon = "Data Source=FACUNDO\\USARESTESQLSERVE; Initial Catalog = TestDB; Integrated Security = SSPI; ";
    // 使用using自动释放数据库连接资源
    using (SqlConnection con = new SqlConnection(strCon))
    {
        string insert = "INSERT INTO Neighborhood (Name, Description) VALUES (@name, @desc);";
        using (SqlCommand command = new SqlCommand(insert, con))
        {
            // 修正参数名,和SQL语句中的参数保持一致
            command.Parameters.AddWithValue("@name", this.Name);
            command.Parameters.AddWithValue("@desc", this.Description);
            try
            {
                con.Open();
                // 执行插入命令,返回受影响的行数
                int rowsAffected = command.ExecuteNonQuery();
                // 受影响行数大于0,说明插入成功
                return rowsAffected > 0;
            }
            catch (SqlException ex)
            {
                // 打印异常信息方便排查,比如主键重复的错误
                Console.WriteLine($"数据库错误:{ex.Message}");
                return false;
            }
            // using块会自动关闭连接,无需手动写finally
        }
    }
}

SQL部分的注意点

你把Name设为主键,意味着不能插入重复的Name值,如果控制台输入的名称已经存在,插入会直接失败。如果业务上允许重复名称,建议把主键改成自增ID列,比如:

CREATE TABLE Neighborhood (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Name VARCHAR(30) NOT NULL,
    Description VARCHAR(50) NOT NULL
)

测试建议

修改代码后,调用Save方法时可以捕获它的返回值,如果返回false,查看控制台输出的错误信息,就能快速定位问题(比如连接字符串错误、主键重复等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:52