powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / обращение к таблице, находящейся в датасете и считывание 1 записи
8 сообщений из 8, страница 1 из 1
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34655447
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

Всем программистам привет! Respect! В общем столкнулся как мне кажется с небольшой проблемкой, связанной с работой с базой данных MS SQL 2005 через технологию ADO.NET. У меня есть клиент и dll, в библиотеку я положил функцию занимающуся соединением с базой данных( есть функции как связный уровень через объект DAtaAdapter так и несвязного уровня используя объекты подключения и команды ). Вот пример расширенной сигнатуры функции, помещенной в DLL :

Код: plaintext
public DataSet LoadPicture(string sql_connect, string sql_command, DataSet sql_dataSet)

может быть я не совсем правильно спроектировал данную функцию и возврашаю не то что необходимо, но в результате я получаю выборку из базы данных( точнее из таблицы ), состоящей для простоты из одной строки( тип поля Image ), т е как я понимаю клиенту приходит DataSet с одной записью, в виде изображения( jpg ). Вопрос в том, что необходимо извлечь данную запись из DataSet и помесить в PictureBox, находящийся на форме. Как я понимаю, необходимо обратиться к таблице, находящейся в датасете и считать эту запись, но я незнаю как называется эта таблица и как поместить в итоге изображение в пикчебокс. Подскажите как быть то ?
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34656931
Decard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FasterHarder
Код: plaintext
I started in 1983, in 2007 i still on a case!
Как я понимаю, необходимо обратиться к таблице, находящейся в датасете и считать эту запись, но я незнаю как называется эта таблица и как поместить в итоге изображение в пикчебокс. Подскажите как быть то ?


Код: plaintext
1.
2.
3.
 MemoryStream ms = new MemoryStream((byte[])table1.Image);
 Bitmap image = new Bitmap(ms);
 pictureBox1.Image = image;
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34656972
Decard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да...забыл совсем:)
Обращение к таблице
Код: plaintext
1.
sql_dataSet.Tables[ 0 ].Rows[ 0 ][ 0 ] 

таблица первая, ряд первый, колонка первая.
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34657058
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

язык программирования C#.
привожу частичный код :

Код: 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.
[quot автор]string sql_connectString = 
            "Data Source=????????????"; // строка подключения
              string sql_select = "select  picture from Picture where ttype=1"; // picture поле типа Image
              SqlConnection sql_conn = new SqlConnection(sql_connectString);
              sql_conn.Open();

              SqlCommand sql_comm = new SqlCommand(sql_select, sql_conn);
              DataSet sql_ds = new DataSet();
              SqlDataAdapter sql_da = new SqlDataAdapter(sql_select, sql_connectString);
              sql_da.Fill(sql_ds, "test"); // либо sql_da.Fill(sql_ds);

              toolStripDropDownButton2.DropDownItems.Clear();
              //    ToolStripDropDownButton2.DropDownItems.Add("Все ")
              //    For i =  0  To mRs.RecordCount -  1 
              //        ToolStripDropDownButton2.DropDownItems.Add(Trim(mRs.Fields("Groups").Value))
              //        '    ListView2.Groups.Add(Trim(mRs.Fields("Groups").Value), Trim(mRs.Fields("Groups").Value))
              //        mRs.MoveNext()
              //    Next



              //MemoryStream ms = new MemoryStream((byte[])table1.Image);
              //Bitmap image = new Bitmap(ms);
              //pictureBox1.Image = image;
             //MemoryStream ms = new MemoryStream((byte[]) sql_ds.Tables[ 0 ].Rows[ 0 ][ 0 ].im

             // sql_ds.Tables[ 0 ].image;[/quot]
что касается :

Код: plaintext
sql_dataSet.Tables[ 0 ].Rows[ 0 ][ 0 ] 
,
то кажется нет такого конструктора

Вы можете конкретно сейчас подсказать как обратиться в поток таблицы, а то я уже весь мздн перерыл и интели синс измучил. Подскажите как быть ?
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34657077
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

подобный вариант тоже не подканывает :

Код: plaintext
MemoryStream ms = new MemoryStream((byte[]) sql_ds.Tables[ 0 ].Rows[ 0 ].im

здесь у Rows[ int index] и все.
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34657387
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

нашел как подобное стопроцентов реализуемо в несвязном уровне при помощи DataReader

Код: 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.
[quot автор]SqlConnection pubsConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=pubs;");
SqlCommand logoCMD = new SqlCommand("SELECT pub_id, logo FROM pub_info", pubsConn);

FileStream fs;                          // Writes the BLOB to a file (*.bmp).
BinaryWriter bw;                        // Streams the BLOB to the FileStream object.

int bufferSize =  100 ;                   // Size of the BLOB buffer.
byte[] outbyte = new byte[bufferSize];  // The BLOB byte[] buffer to be filled by GetBytes.
long retval;                            // The bytes returned from GetBytes.
long startIndex =  0 ;                    // The starting position in the BLOB output.

string pub_id = "";                     // The publisher id to use in the file name.

// Open the connection and read data into the DataReader.
pubsConn.Open();
SqlDataReader myReader = logoCMD.ExecuteReader(CommandBehavior.SequentialAccess);

while (myReader.Read())
{
  // Get the publisher id, which must occur before getting the logo.
  pub_id = myReader.GetString( 0 );  

  // Create a file to hold the output.
  fs = new FileStream("logo" + pub_id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write);
  bw = new BinaryWriter(fs);

  // Reset the starting byte for the new BLOB.
  startIndex =  0 ;

  // Read the bytes into outbyte[] and retain the number of bytes returned.
  retval = myReader.GetBytes( 1 , startIndex, outbyte,  0 , bufferSize);

  // Continue reading and writing while there are bytes beyond the size of the buffer.
  while (retval == bufferSize)
  {
    bw.Write(outbyte);
    bw.Flush();

    // Reposition the start index to the end of the last buffer and fill the buffer.
    startIndex += bufferSize;
    retval = myReader.GetBytes( 1 , startIndex, outbyte,  0 , bufferSize);
  }

  // Write the remaining buffer.
  bw.Write(outbyte,  0 , (int)retval -  1 );
  bw.Flush();

  // Close the output file.
  bw.Close();
  fs.Close();
}

// Close the reader and the connection.
myReader.Close();
pubsConn.Close();[/quot]

а вот как сделать по аналогии через связный уровень пока не очень понятно.
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #34658559
Фотография FasterHarder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
I started in 1983, in 2007 i still on a case!

В общем временно решил проблемку следующим образом :
Код: plaintext
1.
2.
3.
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            ms.Write((byte[])sql_dataSet.Tables[ 0 ].Rows[ 1 ][ 0 ],  0 , 10000 );
            Bitmap btm = new Bitmap(ms);
            pictureBox1.Image = btm;

но дело в том, что иногда вываливается некое сообщение ( см. файл ).

В ado можно было указать так :

Код: plaintext
            mstream.Write(VRS.Fields("Bytes").Value,  0 , VRS.Fields("Bytes").ActualSize)
,
а вот в адодотнет не получается найти подобной реализации. Подскажите как быть то?
...
Рейтинг: 0 / 0
обращение к таблице, находящейся в датасете и считывание 1 записи
    #35203143
Jhon84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, сразу хочу предупредить, что я начинающий программист на Visual Basic.
Прочитав эту тему у меня не совсем получилось применить вышеописанные примеры переработав их к Visual Basic.
У меня почти схожая ситуация - есть база данных Access, в одной из таблиц которых находятся поля объекта OLE, т.б. картинки в данном случае.
Стоит необходимость программно извлечь эту картинку из рекордсета и создать файл на жестком диске с изображением.
У меня не получается определить в чем проблема. Файл изображения записывается в рекодрсет, потом из него извлекается. Размеры исходного файла и получившегося полностью идентичны, НО последний не открывается.
Я конечно понимаю, что данная тема касается С, но всё же обсуждаемая здесь ситуация похожа на мою.
Вот код которым я добавляю изображение в рекордсет:
Dim br As New System.IO.BinaryReader(IO.File.OpenRead(Me.img.Text.ToString))
Dim data As Byte() = br.ReadBytes(br.BaseStream.Length)
br.Close()
Dim myUTF16 As New System.Text.UnicodeEncoding
rs.Fields("img").Value = myUTF16.GetString(data)

Me.img.Text.ToString - текстовое поле с указанием на путь к файлу изображения

Вот код "преобразования" (как я полагаю) этого изображения в файл изображения:
Dim filename1 As String
filename1 = AppPath & "\" & id & ".jpg"
strSQL = "SELECT Main.img FROM Main WHERE Main.id=" & id
rs = db.OpenRecordset(strSQL)
If rs.RecordCount > 0 Then
rs.MoveFirst()
Dim bw As New System.IO.BinaryWriter(IO.File.OpenWrite(filename1))
bw.Write(rs.Fields("img").Value)
bw.Flush()
bw.Close()
End If

AppPath - путь к запуску программы
id - внутренний идентификатор

Зарание благодарю за помощь.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / обращение к таблице, находящейся в датасете и считывание 1 записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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