【问题标题】:Copy DataRow from One SQL Table to another Identical SQL Table C#将 DataRow 从一个 SQL 表复制到另一个相同的 SQL 表 C#
【发布时间】:2014-11-10 15:39:11
【问题描述】:

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

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 我会为此创建一个触发器并允许 SQL Server 为您处理。
  • @websch01ar 我不知道该怎么做。以前从未使用过触发器。我会试着查一下。
  • 看起来你的 File_Data 是一个 nvarchar(max) ?如果是的话,它可以放在一个简单的字符串中。如果你可以直接执行 sql,那么在这种情况下插入 ...select 就可以了。
  • @rene 我的 File_Data 字段是“图像”字段。
  • 您的 UpdateDb 方法是否只接受 sql 字符串?不能用它给sql参数吗?

标签: c# sql asp.net


【解决方案1】:

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

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

【讨论】:

  • 将触发器添加到目标表还是源表?另外,“AuditTable”是什么意思?那是我的目标表吗?
  • 触发器在源表上运行,并将已删除行的记录插入到目标表中。
  • 我通常将我的“影子”表命名为 AuditTable。为了便于阅读,我应该使用类似 DestTable 的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
相关资源
最近更新 更多