powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись объектов в БД
16 сообщений из 16, страница 1 из 1
Запись объектов в БД
    #32908195
fedoseev_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В поле OLE (MS Access) у меня получается записать только Array of Byte. А мне нужно записать структуру, или объект? как сконвертить его в Array of Byte и преобразовать обратно? Это же касается SQL-сервера с полем image или varbinary. Приведите любой практический пример.

заранее спасибо, fedos@bel.ru
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32908455
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32909618
fedoseev_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это пример записи/чтения Файла в БД. Это я знал как делать. Меня интересует как записать переменную типа вот этой структуры:

Structure ДеревоПреподыТемы
Dim Родитель As Integer
Dim Номер As Integer
Dim Текст As String
End Structure

dim A as ДеревоПреподыТемы
====================================
Это что же мне, каждый раз сохранять в файл и обратно?
Кто-нибудь знает как запиcать объектную переменную (а не файл) в базу? Подскажите пожалуйста, 2 недели разобраться не могу!
Может вообще так нельзя сделать?
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32909757
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, получается как бы загнать строку таблицы в ячейку другой таблицы... Подождем ответа на вопрос от корифеев.
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32909928
fedoseev_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не просто строка, структура может быть намного сложнее, в которой члены тоже могут быть объектами, и в каждой строке сама структура будет разная. Кто-нибудь подскажет решение? Гуру, Ау!
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910048
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, нельзя в ячейку записывать просто значения структуры (а не ее саму), а потом считывать эти значения, присваивая их, членам структуры???
P.S. Извини если ступил...
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910300
fedoseev_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я себе представляю так: записывать объект в поток (только не в файловый), а потом его как бинару в БД. Но где взять практический пример подобного кода? Мне только это и нужно - тогда все будет работать.

P.S. Если ты предлагаешь считывать данные из блоб-поля по одному значению, как ты считаешь по элементарным значениям из поля объект к примеру класса "Autocad Drawing" (примерно 25кб)?
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910325
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай структуру сереализуемой и сереализуй в блоб. А потом обратно. Почитай в MSDN про сериализацию объектов .NET
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910390
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ себе представляю так: записывать объект в поток (только не в файловый),
MemoryStream???
кстати, если решишь проблему - закинь примерчик на сайт - уж больно интересно посмотреть что за зверек такой?
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910410
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910465
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже его случай - это SerializableAttribute

только вместо файлового потока нужно использовать MemoryStream для параметра OleDbCommand на чтение/запись поля типа OleDbType.LongVarBinary (или VarBinary), и использовать не SoapFormatter, а BinaryFormatter
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910828
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец то подоспела тяжелая артиллерия...
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32910877
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vladgrig

вот примерно такой код для сохранения/восстановления структоры в mdb
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
using System;
using System.IO;
using System.Data;
using System.Data.OleDb;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

namespace OleDbFormatter
{
  class Class1
  {
    /******************************************************************/
    [Serializable]
    public struct Data
    { public string a;
      public int    b;
    }
    /******************************************************************/

    [STAThread]
    static void Main(string[] args)
    {
      OleDbConnection cn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\db5.mdb;");
      cn.Open();
      // в db5.mdb есть таблица TBL1 с полями:
      // ID     - AutoNumber
      // Struct - OLE Object

      /**ЗАПИСЬ СТРУКТУРЫ В БД **************************/
      Data  s=new Data(); // <--- сохраним эту структуру в БД
      s.a="привет врагам";
      s.b=7;

      OleDbCommand    cm=new OleDbCommand("INSERT INTO TBL1 (Struct) VALUES(?)", cn);
      OleDbParameter  pm=new OleDbParameter("@Struct", OleDbType.LongVarBinary);

      using(MemoryStream ms=new MemoryStream())
      { BinaryFormatter ft=new BinaryFormatter();
        ft.Serialize(ms, s);
        pm.Value=ms.ToArray();
        ms.Close();
      }

      cm.Parameters.Add(pm);
      cm.ExecuteNonQuery();

      /**ПОЛУЧЕНИЕ AUTONUMBER'а ****************/
      OleDbCommand    an=new OleDbCommand("SELECT @@IDENTITY", cn);
      int id=Convert.ToInt32(an.ExecuteScalar());
 
     /**ЧТЕНИЕ СТРУКТУРЫ ИЗ БД **************************/
      Data  d; // <--- сюда восстановим сохраненную в БД структуру

      OleDbCommand    cs=new OleDbCommand("SELECT Struct FROM TBL1 WHERE ID="+id.ToString(), cn);
      OleDbDataReader rd=cs.ExecuteReader();
      rd.Read();
      using(MemoryStream ms=new MemoryStream((byte[])rd["Struct"]))
      { BinaryFormatter ft=new BinaryFormatter();
        d=(Data)ft.Deserialize(ms);
        ms.Close();
      }
      rd.Close();
    }
  }
}
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32914076
fedoseev_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за пример, но нельзя ли подобный на VisualBasic.NET? Я же не такой отец C++, чтобы переконвертить его на VB.
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32914242
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за пример, но нельзя ли подобный на VisualBasic.NET?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
Imports System
Imports System.IO
Imports System.Data
Imports System.Data.OleDb
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Class1
    '/******************************************************************/
    <Serializable()> Public Structure Data
        Public a As String
        Public b As String
    End Structure

    <STAThread()> Public Shared Sub Main()
        Dim cn As OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\db5.mdb;")
        cn.Open()
        '// в db5.mdb есть таблица TBL1 с полями:
        '// ID     - AutoNumber
        '// Struct - OLE Object
        '/**ЗАПИСЬ СТРУКТУРЫ В БД **************************/
        Dim s As Data = New Data   '// <--- сохраним эту структуру в БД
        s.a = "привет врагам"
        s.b =  7 
        Dim cm As OleDbCommand = New OleDbCommand("INSERT INTO TBL1 (Struct) VALUES(?)", cn)
        Dim pm As OleDbParameter = New OleDbParameter("@Struct", OleDbType.LongVarBinary)

        Dim ms As MemoryStream = New MemoryStream
        Try
            Dim ft As BinaryFormatter = New BinaryFormatter
            ft.Serialize(ms, s)
            pm.Value = ms.ToArray()
            ms.Close()
        Finally
            Dim disp As IDisposable
            If TypeOf ms Is IDisposable Then
                disp = ms
                disp.Dispose()
            End If
        End Try
        cm.Parameters.Add(pm)
        cm.ExecuteNonQuery()
        '/**ПОЛУЧЕНИЕ AUTONUMBER'а ****************/
        Dim an As OleDbCommand = New OleDbCommand("SELECT @@IDENTITY", cn)
        Dim id As Integer = Convert.ToInt32(an.ExecuteScalar())

        '/**ЧТЕНИЕ СТРУКТУРЫ ИЗ БД **************************/
        Dim d As Data ' // <--- сюда восстановим сохраненную в БД структуру
        Dim cs As OleDbCommand = New OleDbCommand("SELECT Struct FROM TBL1 WHERE ID=" + id.ToString(), cn)
        Dim rd As OleDbDataReader = cs.ExecuteReader()
        rd.Read()

        ms = New MemoryStream(CType(rd("Struct"), Byte()))
        Try
            Dim ft As BinaryFormatter = New BinaryFormatter
            d = CType(ft.Deserialize(ms), Data)
            ms.Close()
        Finally
            Dim disp As IDisposable
            If TypeOf ms Is IDisposable Then
                disp = ms
                disp.Dispose()
            End If
        End Try
        rd.Close()
    End Sub
End Class
COPYRIGHT кузя

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Запись объектов в БД
    #32915510
fedoseev_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за пример, сегодня же зарегистрируюсь на этом форуме. А вот на ГотДотНет совсем не помогли:
http://www.gotdotnet.ru/Forums/CommonForum/118499.aspx
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись объектов в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]