将VB 2008中的存储过程调用到Server数据库。传递几个变量,其中一个是具有完整路径的文件名。
我很难让存储过程获取文件并从中创建一个BLOB,并将其插入到表中的一个字段中。
传入变量:
@myProduct Varchar(20),
@myVersion Varchar(20),
--@myFileName Varchar(50),
@myPath Varchar(100),
@myStatus Varchar(15),
@myDeviceType VarChar(50),
@myAction Varchar(50),
@shortName Varchar(50),
@myBlob VarBinary(Max)以下是插入的内容:
INSERT INTO schema.tablename
VALUES (@myProduct, @myVersion, @myAction, NULL,
@myPath, @myBlob, myDeviceType, @Shortname)我试着把
SELECT BulkColumn
FROM OPENROWSET (BULK @myblob, SINGLE_CLOB) @lBlob 用@myBlob改变@lBlob。
我得到了:
不允许从数据类型varchar隐式转换到var二进制文件(Max)。使用转换函数运行此查询。
有什么帮助吗?
发布于 2015-08-28 01:16:44
我必须读取您获取文件内容的代码,但看起来您正在以字符串的形式检索文件内容,并将它们传递给存储过程。然后,该语句试图将字符串插入二进制字段,但由于数据类型无效而失败。在insert语句中,可以执行以下操作:
INSERT INTO schema.tablename
VALUES (
@myProduct,
@myVersion,
@myAction,
NULL,
@myPath,
CONVERT(varbinary(MAX),@myBlob),
myDeviceType,
@Shortname
)如果无法更改insert语句,则还可以在将字符串传递给存储过程之前将字符串转换为二进制数据类型。
另一种选择是将表上的数据类型从var二进制(Max)更改为varchar(max),然后您将不必管理任何转换。
如果您真的想变得精巧,还可以查看Server (https://technet.microsoft.com/en-us/library/Bb933993(v=SQL.105).aspx )。使用filestreams,您可以从数据库中传递和检索文件。它将存储在数据库之外的文件系统中,数据库将在内部维护有关该文件的元数据。
发布于 2015-08-28 01:37:23
阅读您的代码时,您似乎要将一个varbinary数据类型传递给varchar列数据类型。请检查您的列数据类型。
如果您不想转换@myBlob,您也必须使您的列数据类型为varbinary。因为您将变量@myBlob声明为varbinary.‘,或者可以将变量声明的数据类型从varbinary更改为varchar。
3种方法来纠正它。
@myBlob转换为varchar:
转换(varchar(Max),@myBlob)或CAST(@myBlob作为varchar(max))varchar更改为varbinaryvarchar:
宣布@myBlob VARCHAR(最大)问候
https://stackoverflow.com/questions/32261764
复制相似问题