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

时间:2014-09-16 18:54:13

标签: c# sql asp.net

我有两个相同的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);
    }

任何帮助都将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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