![]() |
![]() |
![]() |
|
OFF: MS SQL & .NET CF- возможно ли хранить файлы в таблицах? | ☑ | ||
---|---|---|---|---|
0
Masquerade
08.05.10
✎
14:07
|
Есть файл, который должен храниться на сервере и который надо передать на клиента.
Хранится в таблице в столбце varbinary(max) Весит 4 метра (пока). На клиенте с установленным соединением считываю через SQLDataReader в массив byte[] и пишу в локальный файл. Чудеса в том, что один и тот же код работает очень нестабильно. SqlDataReader не закрывается вообще (SQLExeption),даже с SQlCommand.Cancel(), соот-но - соединение тоже не закрыть. SQLDataReader.GetBytes() - работает через раз. Скажите - такой механизм вообще должен работать? 4 метра передать он должен вроде как без проблем.. |
|||
1
Zeldan
08.05.10
✎
15:45
|
версия SQL и CF?
по идее должно работать... SqlDataReader пробовал вручную убивать или переопределять? |
|||
2
Masquerade
08.05.10
✎
23:58
|
(1)
Да все распоследнее, с сайта MS. SqlDataReader - и так и так пробовал прибить - нифига. Что значит переопределть? SQLCommand newC = new SQLCommand(запрос,коннект); SQLDAtaReader newDR = newC.executeReader(); newDr.Read(); ***** newDr.Close() - ошибка Если спользую using - то ошибка вылетает на границе выхода using. newC.Cancel(); newDr.Close(); -- та же ошибка. |
|||
3
Masquerade
08.05.10
✎
23:59
|
Дкмал заюзать executeScalar(); - но 4-е метра наверное много для нее...
|
|||
4
kitt
09.05.10
✎
01:04
|
добро пожаловать в мир Виндовс
|
|||
5
Zeldan
09.05.10
✎
12:00
|
private static void ReadOrderData(string connectionString)
{ string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(queryString, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // Call Read before accessing data. while (reader.Read()) { Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1])); } // Call Close when done reading. reader.Close(); } } пользовался когда-то, в точности как в MSDN (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx) "To create a SqlDataReader, you must call the ExecuteReader method of the SqlCommand object, instead of directly using a constructor." Значит делаешь все правильно,покажи ошибку,возможно причина в другом. Можно попробовать через GetValue переделать(в Note по ссылке) |
|||
6
Zeldan
09.05.10
✎
12:01
|
||||
7
Zeldan
09.05.10
✎
12:01
|
(4)к чему этот комментарий?
|
|||
8
Masquerade
09.05.10
✎
14:50
|
Byte[] blob = null;
FileStream fs = null; String SQl_String = "SELECT Cabs FROM Update_ver WHERE ver='" + SQL_ver + "'"; SqlCommand cmd = new SqlCommand(SQl_String,serCon); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); blob = new Byte[(sdr.GetBytes(0, 0, null, 0, int.MaxValue))]; //здесь через раз может выдать //ошибку. sdr.GetBytes(0, 0, blob, 0, blob.Length); sdr.Close(); //Этот код ни разу не сработал. serCon.Close(); |
|||
9
Zeldan
09.05.10
✎
15:51
|
(8) ну блин,с размером лажа
Смотри в документации написано,что GetBytes length возвращает количество максимальных символов,а не прочитанных. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getbytes(VS.71).aspx написано: 1."length The maximum length to copy into the buffer." 2."GetBytes returns the number of available bytes in the field" т.е ты в байтовый массив пытаешся запихнуть значение размером с int если надо именно такой размер,то пробуй через GetValue в нете полно инфы,и внимательно MSDN. Чтобы убедиться точно,отлавливай через try ошибку. |
|||
10
Zeldan
09.05.10
✎
15:53
|
+(9)http://articles.techrepublic.com.com/5100-10878_11-5766889.html
хотя вот тут и такой код работает,но они весь блок в try запихнули |
|||
11
Masquerade
09.05.10
✎
18:39
|
(9)
Небольшой нюанс, дружище. Из твоего же источника: If you pass a buffer that is a null reference (Nothing in Visual Basic), GetBytes returns the length of the field in bytes. И второй нюанс - бывает, что этот код работает. Правда - закрыть reader так ни разу и не получилось. |
|||
12
Zeldan
10.05.10
✎
11:10
|
(11)Согласен,не заметил.У меня вариантов тогда больше нет,на профильном форуме писал каком-то? типа http://www.gotdotnet.ru/
думаю там быстрее помогут,сам понимаешь) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |