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