text、ntext或image指针值无效
本文关键字:指针 无效 image ntext text | 更新日期: 2023-09-27 18:00:15
我正试图将一个文件上传到我的数据库(通过将二进制文件内容读取到我的存储过程中)。我将输入流传递给我的方法,如下所示:
LoadFile(gAttachmentContentID, file.InputStream, trn);
public static void LoadFile2(Guid gAttachmentContentID, Stream stm, IDbTransaction trn)
{
stm.Position = 0;
byte[] binFILE_POINTER = new byte[32];
// Now read s into a byte buffer.
byte[] bytes = new byte[stm.Length];
int numBytesToRead = (int)stm.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to 10.
int n = stm.Read(bytes, numBytesRead, 10);
// The end of the file is reached.
if (n == 0)
{
break;
}
numBytesRead += n;
numBytesToRead -= n;
}
stm.Close();
SqlProcs.spATTACHMENTS_CONTENT_WriteOffset(gAttachmentContentID, binFILE_POINTER, 0, bytes, trn);
// numBytesToRead should be 0 now, and numBytesRead should
// equal 100.
Console.WriteLine("number of bytes read: {0:d}", numBytesRead);
}
使用此程序:
public static void spATTACHMENTS_CONTENT_WriteOffset(Guid gID, byte[] binFILE_POINTER, Int32 nFILE_OFFSET, byte[] byBYTES, IDbTransaction trn)
{
IDbConnection con = trn.Connection;
using ( IDbCommand cmd = con.CreateCommand() )
{
cmd.Transaction = trn;
cmd.CommandType = CommandType.StoredProcedure;
if ( Sql.IsOracle(cmd) )
cmd.CommandText = "spATTACHMENTS_CONTENT_WriteOff";
else
cmd.CommandText = "spATTACHMENTS_CONTENT_WriteOffset";
IDbDataParameter parID = Sql.AddParameter(cmd, "@ID" , gID );
IDbDataParameter parFILE_POINTER = Sql.AddParameter(cmd, "@FILE_POINTER" , binFILE_POINTER );
IDbDataParameter parMODIFIED_USER_ID = Sql.AddParameter(cmd, "@MODIFIED_USER_ID", Security.USER_ID );
IDbDataParameter parFILE_OFFSET = Sql.AddParameter(cmd, "@FILE_OFFSET" , nFILE_OFFSET );
IDbDataParameter parBYTES = Sql.AddParameter(cmd, "@BYTES" , byBYTES );
cmd.ExecuteNonQuery();
}
}
但我得到以下错误:
无效的text、ntext或图像指针值0x000000000000000000000000。
错误发生在我的存储过程方法的cmd.ExecuteNonQuery();
行。
存储过程:
Create Procedure dbo.spATTACHMENTS_CONTENT_WriteOffset
( @ID uniqueidentifier
, @FILE_POINTER binary(16)
, @MODIFIED_USER_ID uniqueidentifier
, @FILE_OFFSET int
, @BYTES image
)
with encryption
as
begin
set nocount on
-- 10/22/2005 Paul. @ID is used in Oracle and MySQL.
-- #if SQL_Server /*
updatetext ATTACHMENTS_CONTENT.ATTACHMENT
@FILE_POINTER
@FILE_OFFSET
null -- 0 deletes no data, null deletes all data from insertion point.
@BYTES;
谢谢。
因为每行只上传一个文件,所以只使用普通的UPDATE会容易得多,而不是不必要地摆弄指针和偏移量。命令可以很简单:
UPDATE ATTACHMENTS_CONTENT SET ATTACHMENT = @BYTES Where ID=@ID
我不确定你的ID字段是什么,所以我只是写了ID,但我相信你可以用正确的ID代替它。
你还没有填写binFILE_POINTER[],所以它将充满零。
我猜这就是
*Invalid text, ntext, or image pointer value 0x00000000000000000000000000000000.*
来自。。。