C# 将DataRow从一个SQL表复制到另一个相同的SQL表C

C# 将DataRow从一个SQL表复制到另一个相同的SQL表C,c#,sql,asp.net,C#,Sql,Asp.net,我有两个相同的SQL表,一个是工作表,另一个是历史表。每当用户选择要删除的记录时,我希望能够将记录从工作表写入历史表。这两个表是彼此的克隆,只是为了将删除的记录保存到历史文件中 这两个表都包含标识列第一列和图像数据类型列 我想知道的是什么是最好的方法。以下是我所拥有的,但我不断得到一个错误,说: 无法将“System.String”类型的对象强制转换为“System.Byte[]”类型 string sql = "SELECT * FROM EDI10000 WHERE File_Id

我有两个相同的SQL表,一个是工作表,另一个是历史表。每当用户选择要删除的记录时,我希望能够将记录从工作表写入历史表。这两个表是彼此的克隆,只是为了将删除的记录保存到历史文件中

这两个表都包含标识列第一列和图像数据类型列

我想知道的是什么是最好的方法。以下是我所拥有的,但我不断得到一个错误,说:

无法将“System.String”类型的对象强制转换为“System.Byte[]”类型

    string sql = "SELECT * FROM EDI10000 WHERE File_Id = " + fid;
    DataTable dt1 = Vit.GetDataRecords(sql);
    if (dt1.Rows.Count > 0)
    {                               
            DataRow dr = dt1.Rows[0];

            int fileId   = int.Parse(fid);
            string tpID  = Vit.GetFieldValue(dr, "Tp_Id");
            string fName = Vit.GetFieldValue(dr, "File_Name");
            int fileSz   = int.Parse(Vit.GetFieldValue(dr, "File_Size"));
            string conType = Vit.GetFieldValue(dr, "Content_Type");

            object obj = Vit.GetFieldValue(dr, "File_Data");
            Byte[] byteData = (Byte[])obj;
            MemoryStream ms = new MemoryStream(byteData);

            object[] Insert = new object[] { fileId, tpID, fName, fileSz, ms, conType };
            string sql2 = string.Format(@"INSERT INTO EDI10500 VALUES ({0}, '{1}', '{2}', {3}, '{4}', '{5}')", Insert);
            Vit.UpdateDB(sql2);
    }
任何帮助都将不胜感激


谢谢

以下是一个触发器的粗略示例:

CREATE TRIGGER [dbo].[tr_SourceTableName_Audit] ON [dbo].[SourceTableName] FOR DELETE AS

BEGIN
    SET NOCOUNT ON;
    BEGIN TRY

        INSERT INTO AuditTable (cols)
        Select * from deleted
    END TRY
    BEGIN CATCH
        -- In this case, I just want to eat the error.
    END CATCH
END

我将为此创建一个触发器,并允许SQL Server为您处理此问题。@websch01ar我不确定如何执行此操作。以前从未使用过触发器。我会试着查一下。看起来你的文件数据是nvarcharmax?如果是,它可以用一个简单的字符串表示。如果您可以直接exexute sql,则在这种情况下插入到…select将起作用。@rene no my File_数据字段是图像字段。您的UpdateDb方法是否只接受sql字符串?您不能使用它提供sql参数?我是要将触发器添加到目标表还是源表?还有,你所说的审计表是什么意思?这是我的目标表吗?触发器作用于源表,并将删除行的记录插入目标表。我通常将我的影子表命名为AuditTable。为了可读性,我应该使用类似destable的东西。