我有两个相同的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);
}
任何帮助都将不胜感激。
谢谢
答案 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