【问题标题】:Why does Update operation on VarBinary Inserts new row instead of updating?为什么 VarBinary 上的 Update 操作插入新行而不是更新?
【发布时间】:2026-01-30 16:00:02
【问题描述】:

我正在尝试使用新值更新 varbinary(max) 列,该值也是 varbinary(max) 最终结果是我得到了一个新行而不是更新该行。

Sql

CREATE proc Proc_UpdateFile      
@FileName varchar(50),  
@OldFileName varchar(50),       
@GuidNo varchar(50),      
@Img varbinary(max)      
as      
update tbl_BazImages set ImgName=@FileName , img = @Img where GuidNo=@GuidNo and ImgName=@OldFileName    

代码隐藏:

 public bool UpdateFile(Byte[] bytes, string filename, string guidno,string OldFileName)
    {
        SqlConnection con = new SqlConnection(claims_expense);
        SqlCommand cmd = new SqlCommand();
        SqlDataAdapter da = new SqlDataAdapter();
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Proc_UpdateFile";

        cmd.Parameters.AddWithValue("@GuidNo", guidno);
        cmd.Parameters.AddWithValue("@FileName", filename);
        cmd.Parameters.AddWithValue("@Img", bytes);
        cmd.Parameters.AddWithValue("@OldFileName", OldFileName);
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();

        }
        catch (Exception ex)
        {
            eLog.WriteErrorLog(ex, "dboperation.cs", "UpdateFile");
            return false;
        }
        finally { con.Close(); }
        return true;
    }

【问题讨论】:

  • 它没有。你看到了什么让你认为它是?
  • 也许该表上有一个更新触发器插入了一个新行。
  • 没有触发器。但仍然更新,插入新行。
  • @Arbaaz 绝对不在您提供的程序中。所以,看看别处吧。
  • @DenisValeev 我已经包含了我的代码隐藏。

标签: asp.net sql sql-server tsql


【解决方案1】:

正如 cmets 所示,您提供的代码无法插入记录。您的系统中还发生了其他一些您遗漏的事情。

我建议使用SQL Server Profiler 尽可能多地隔离,以查看实际发生的情况。

【讨论】: