【发布时间】: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参数吗?