Потоковая передача в и из поля изображения SQL Server 2005 с C #? - PullRequest
0 голосов
/ 04 декабря 2009

После тщательной проверки ответа на этот вопрос я все еще не могу найти удовлетворительное решение. Так что вот так.

Мне нужно хранить возможно большое количество данных в столбце таблицы SQL Server 2005. Мне абсолютно необходимо работать в потоковом режиме, так что:

  1. При записи данные отправляются частями в базу данных. Есть ли какой-то встроенный способ добиться этого из клиентского кода C # с использованием классов в System.Data.SqlClient? Или мне нужно прибегнуть к использованию объекта ADODB.Net Stream? Не уверен, как смешать две концепции (особенно в отношении участия в текущей SqlTransaction.

В качестве альтернативы, есть ли способ для хранимой процедуры T-SQL добавить данные в существующий столбец. При таком подходе хранимая процедура будет вызываться несколько раз из клиентского кода, и это будет соответствовать требованию потоковой передачи.

  1. При чтении данные следует читать по одному фрагменту за раз в потоковом режиме.

В качестве альтернативы, существует ли способ для хранимой процедуры T-SQL обеспечить последовательный или даже произвольный доступ к содержимому поля изображения?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2009

На самом деле, есть способ, просто немного болит.

SQL Server 2005 поддерживает обновление части столбца: http://technet.microsoft.com/en-us/library/ms177523(SQL.90).aspx

И вы можете выполнить чтение части столбца с подстрокой (да, даже двоичным - он будет весело возвращать массив байтов).

Предостережения в том, что это всего лишь обновление, поэтому вам сначала нужно создать значение в поле varbinary (max), а затем обновить его. Кроме этого, абсолютно возможно иметь дело с тем, как если бы вы передавали данные в / из SQL Server. Я обернул функциональность поиска / обновления потоковым классом, чтобы облегчить мою жизнь.

Надеюсь, это поможет.

0 голосов
/ 06 декабря 2009

Ну, отвечая на мой вопрос.

Правда в том, что ... на самом деле нет способа делать то, что я хочу. Либо из чистого клиентского кода, либо из серверных хранимых процедур в T-SQL. Пока мы не перейдем на SQL Server 2008, нам нужно будет найти другое решение.

Однако, - это на самом деле способ симулировать это поведение, так что требование потоковой передачи достигается. Решение заключается в сотрудничестве между кодом клиента и сервера.

База данных сервера должна, например, предоставлять все содержимое для потоковой передачи в виде набора записей в таблице фрагментов . Каждая запись, представляющая кусок всего содержимого для потоковой передачи. В то время как на клиенте поток читается последовательно, а затем каждый кусок отправляется в базу данных для заполнения одной записи.

При соответствующем ведении бухгалтерии чтение сохраненных данных также может выполняться потоковым способом.

Кстати, именно этим и занимается Microsoft BizTalk Server, и вот как я узнаю.

...