C# 将文件添加到SQL表-从不保存

C# 将文件添加到SQL表-从不保存,c#,sql,sql-server,C#,Sql,Sql Server,我正在尝试用本地文件更新数据类型映像的列 Update tblabc set DOCBLOB =(Select * FROM OPENROWSET(BULK 'C:\TEMP\abc.doc', SINGLE_BLOB) AS img) where ID= 62 GO 查询似乎正确执行,没有错误,但列仍为NULL。我在MSMS中运行查询,然后立即检查表。我最初尝试使用C更新blob列,但得到了相同的结果-我没有收到错误,但从未看到更新 我已成功更新了一个文本列,因此假设权限正常 (Select

我正在尝试用本地文件更新数据类型映像的列

Update tblabc
set DOCBLOB =(Select * FROM OPENROWSET(BULK 'C:\TEMP\abc.doc', SINGLE_BLOB) AS img)
where ID= 62
GO
查询似乎正确执行,没有错误,但列仍为NULL。我在MSMS中运行查询,然后立即检查表。我最初尝试使用C更新blob列,但得到了相同的结果-我没有收到错误,但从未看到更新

我已成功更新了一个文本列,因此假设权限正常

(Select * FROM OPENROWSET(BULK 'C:\TEMP\abc.doc', SINGLE_BLOB) AS img)

返回成功填充的列Bulkcolumn

首先,我建议转储映像数据类型并改用varbinarymax-自SQL Server 2005以来,映像已被弃用

其次,我将您的更新声明稍微改写如下:

UPDATE TblFiles
SET DOCBLOB = img.BulkColumn 
FROM OPENROWSET(BULK 'C:\TEMP\abc.doc', SINGLE_BLOB) AS img
WHERE ID = 62

在我的例子中,这很好——二进制列使用OPENROWSET调用中指定的文件的内容进行更新

结果是在我试图更新的表上执行了一个触发器代码。 所以每次我的更新都会被逆转


禁用触发器后,我的原始查询工作了

您是在更新后立即检查该值,还是在另一个数据库会话中检查该值?如果在新会话中检查,问题可能是您尚未提交更改。给定文件名,可以合理地猜测您使用的是MS SQL Server版本。如果这是正确的,那么最好使用一个MS SQL Server标记来标记问题;如果不正确,最好确定您使用的是哪种DBMS。或者,换言之,在询问SQL问题时,始终识别您正在使用的DBMS以及数据库。通常,当人们在评论中要求澄清时,最好使用额外的信息更新问题。这一次我已经为你做了-请记住以后。我可以建议只运行:从OpenRowsBulk'C:\TEMP\abc.doc中选择*,作为子选择体的img,并检查它是否返回非空值。对不起,我没主意了。我不使用SQL Server,所以我在那里没有能够提供帮助的领域专业知识。愚蠢的问题是,tblabc表中是否有ID为62的行?