Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему в varbinary(max) сохраняется только первый байт?  [new]
KeyKeeper
Member

Откуда:
Сообщений: 1873
Подскажите, пожалуйста, в чём я затупил, что в колонку BinaryContent пишется только первый байт?

Таблица:
REATE TABLE [dbo].[ReceivedFiles](
	[ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
	[Name] [varchar](50) NOT NULL,
	[Size] [bigint] NOT NULL,
	[DateCreated] [datetime] NOT NULL,
	[DateUploaded] [datetime] NOT NULL,
	[BinaryContent] [varbinary](max) NOT NULL,
 CONSTRAINT [PK_ReceivedFiles] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

Вызываемая хранимка:
CREATE PROCEDURE [dbo].[UploadFile]
	@FileName [varchar](50),
	@DateCreated [datetime],
	@FileSize [bigint],
	@BinaryContent [varbinary]
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	INSERT INTO [dbo].[ReceivedFiles] (Name, Size, DateCreated, DateUploaded, BinaryContent)
		VALUES (@FileName, @FileSize, @DateCreated, GETDATE(), @BinaryContent);
		
	SELECT @@RowCount;
END

GO

Вызов хранимки из C#:
SqlConnection connection = GetConnectionToServer();
        if (connection != null)
        {
            using (connection)
            {
                try
                {
                    connection.Open();
                    SqlCommand command = new SqlCommand("UploadFile", connection);
                    command.CommandType = CommandType.StoredProcedure;

                    command.Parameters.AddWithValue("@FileName", fullFileName);
                    command.Parameters.AddWithValue("@DateCreated", fileDateCreated.ToString("yyyyMMdd hh:mm:ss"));
                    command.Parameters.AddWithValue("@FileSize", fileSize);
                    command.Parameters.Add("@BinaryContent", SqlDbType.VarBinary);
                    command.Parameters["@BinaryContent"].Value = fileBinaryData;

                    int affectedRows = (int)command.ExecuteScalar();
                    if (affectedRows != 1)
                        throw new Exception("The number of affected rows as a result of uploading file differs from 1 some reason.");
                    return true;
                }
                catch (Exception exception)
                {
                    Trace.TraceError(exception.ToString());
                    return false;
                }
            }
        }
        return false;

Профайлер показывает, что вызов фактически осуществляется так:
exec UploadFile @FileName=N'C:\Temp\Windows Media Player - Copy.lnk',@DateCreated=N'20090623 03:04:37',@FileSize=1888,@BinaryContent=0x4C0000000114020000000000C0... (много байтов)
23 июн 09, 15:15    [7333578]     Ответить | Цитировать Сообщить модератору
 Re: Почему в varbinary(max) сохраняется только первый байт?  [new]
KeyKeeper
Member

Откуда:
Сообщений: 1873
да, после исполнения хранимки в колонке BinaryContent "лежит" значение: 0x4C
23 июн 09, 15:16    [7333587]     Ответить | Цитировать Сообщить модератору
 Re: Почему в varbinary(max) сохраняется только первый байт?  [new]
aleks2
Guest
@BinaryContent varbinary
varbinary=varbinary[1]
23 июн 09, 15:18    [7333602]     Ответить | Цитировать Сообщить модератору
 Re: Почему в varbinary(max) сохраняется только первый байт?  [new]
iljy
Guest
KeyKeeper,

CREATE PROCEDURE [dbo].[UploadFile]
@FileName [varchar](50),
@DateCreated [datetime],
@FileSize [bigint],
@BinaryContent [varbinary]


тип параметра @BinaryContent посмотрите
23 июн 09, 15:18    [7333604]     Ответить | Цитировать Сообщить модератору
 Re: Почему в varbinary(max) сохраняется только первый байт?  [new]
KeyKeeper
Member

Откуда:
Сообщений: 1873
Огромное спасибо и извините за беспокойство. Сам уже долго не мог заметить! Давно не практиковался с SQL...
23 июн 09, 15:20    [7333614]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить