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

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

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

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

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

только вместо файлового потока нужно использовать MemoryStream для параметра OleDbCommand на чтение/запись поля типа OleDbType.LongVarBinary (или VarBinary), и использовать не SoapFormatter, а BinaryFormatter
...
Рейтинг: 0 / 0
10.02.2005, 18:21
    #32910828
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись объектов в БД
Наконец то подоспела тяжелая артиллерия...
...
Рейтинг: 0 / 0
10.02.2005, 18:39
    #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
14.02.2005, 11:55
    #32914076
fedoseev_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись объектов в БД
Спасибо за пример, но нельзя ли подобный на VisualBasic.NET? Я же не такой отец C++, чтобы переконвертить его на VB.
...
Рейтинг: 0 / 0
14.02.2005, 12:50
    #32914242
Sa
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
15.02.2005, 08:49
    #32915510
fedoseev_sv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись объектов в БД
Большое спасибо за пример, сегодня же зарегистрируюсь на этом форуме. А вот на ГотДотНет совсем не помогли:
http://www.gotdotnet.ru/Forums/CommonForum/118499.aspx
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запись объектов в БД / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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