Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Опять "бинарные файлы в базу"

1.9K
09 декабря 2008 года
Nigger
71 / / 09.04.2005
Доброго времени.
Подскажите пожалуйста почему не получается считать бинарные данные из поля базы ?
Первое строковое поле считывает, а у второго поля типа VarBinary считывает только первый байт.
И не знаю как посмотреть что реально лежит в таблице базы. В SQL Server Managment Studio видно только <Binary data> :(

Считываю данные как в примере MSDNа:
(ASP.NET, C#, VS 2005, база на MS SQL Server Express Edition)
Код:
FileStream stream;
            BinaryWriter writer;
            long retval;
            long startIndex = 0;                    

            int bufferSize = 2000;
            byte[] aBytes = new byte[bufferSize];
            string Name = "";

            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("as_Table_GetModelByID", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@ID", SqlDbType.Int).Value = id;
                cn.Open();
                IDataReader reader = ExecuteReader(cmd, CommandBehavior.SequentialAccess);
                if (reader.Read())
                {
                    Name = reader.GetString(0);

                    stream = new FileStream(
                      "File_" + Name + ".jpg", FileMode.OpenOrCreate, FileAccess.Write);
                    writer = new BinaryWriter(stream);

                    startIndex = 0;

                    retval = reader.GetBytes(1, startIndex, aBytes, 0, bufferSize);

                    while (retval == bufferSize)
                    {
                        writer.Write(aBytes);
                        writer.Flush();

                        startIndex += bufferSize;
                        retval = reader.GetBytes(1, startIndex, aBytes, 0, bufferSize);
                    }

                    writer.Write(aBytes, 0, (int)retval - 1);
                    writer.Flush();

                    writer.Close();
                    stream.Close();

                }

Хранимая процедура
 
Код:
ALTER PROCEDURE dbo.as_Table_GetModelByID
(
        @ID     int
)
AS
    SET NOCOUNT ON
    SELECT as_Table.Name, as_Table.Model
    FROM as_Table
    WHERE
        ID = @ID

Сохраняю маленькую (1,5КБ) картинку формата JPG в таблицу так:
Код:
...
            byte[] aBytes;

            BinaryReader br = new BinaryReader(fileStream);
            aBytes = br.ReadBytes((int)fileStream.Length);

            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("as_Table_Insert", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = Name;
                cmd.Parameters.Add("@Model", SqlDbType.VarBinary).Value = aBytes;
                cmd.Parameters.Add("@ID", SqlDbType.Int).Direction = ParameterDirection.Output;
                cn.Open();
                int ret = ExecuteNonQuery(cmd);
                return (int)cmd.Parameters["@ID"].Value;
            }

Хранимая процедура выглядит так :
Код:
ALTER PROCEDURE dbo.as_Table_Insert
(
    @Name   nvarchar(256),
    @Model      varbinary,
    @ID     int OUTPUT
)
AS
    SET NOCOUNT ON
    INSERT INTO as_Table
        (Name, Model)
    VALUES
        (@Name, @Model)
    SET @ID = scope_identity()
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог