Хранение набора данных XML в SQL Server 2000 - PullRequest
2 голосов
/ 23 февраля 2010

Мне нужно сохранить DataSet, результаты приложения для создания отчетов, в таблицу в SQL Server 2000. Сохраняю ли я наборы данных так же, как я бы сохранял файлы в БД, через Byte Array ()?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2010

SQL Server 2000 действительно плохо оборудован для обработки больших двоичных объектов XML. Он не имеет выделенного типа XML и не поддерживает большой текст в форме типа данных VARCHAR (MAX). Оба доступны в SQL Server 2005 и более поздних версиях.

Если вы абсолютно и определенно застряли на 2000, ваш лучший вариант - сохранить XML в столбце TEXT (или NTEXT - 2 байта на символ - если вам нужно поддерживать наборы символов не-ASCII-типа как азиатские языки, иврит, арабский и т. д.).

Имейте в виду, что: тип данных столбца TEXT не очень полезен в том смысле, что вы не можете действительно много сделать с ним без особых хлопот - вы даже не можете реально что-то искать или заменять. Это беспорядок. Ни один из обычных строковых методов не работает с ним - это действительно блоб типа «сохрани и забудь» .....

ОБНОВЛЕНИЕ: если вам никогда не потребуется проверять содержимое файла, пока он хранится в базе данных (правда?), Вы также можете использовать тип данных IMAGE.

Чтобы сохранить файл в SQL Server, сделайте что-то вроде этого:

private void AddFileToDatabase(string filename)
{
   using(SqlConnection con = new SqlConnection("server=***;database=***;integrated security=SSPI;"))
   {
      string insertStmt = "INSERT INTO dbo.YourTableName(DocFilename, DocContent) VALUES(@FileName, @Content)";

      using(SqlCommand cmd = new SqlCommand(insertStmt, con))
      {
          cmd.Parameters.AddWithValue("@FileName", filename);
          cmd.Parameters.Add("@Content", SqlDbType.Image);

          cmd.Parameters["@Content"].Value = File.ReadAllBytes(filename);

          con.Open();
          int result = cmd.ExecuteNonQuery();
          con.Close();
      }
   }
}

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

Если вы используете TEXT/NTEXT, вам нужно сохранить фактическую строку, например, вы не могли бы использовать двоичный файл (например, Word) - но если у вас есть вывод из отчета в виде XML, HTML или чего-то еще, то TEXT / NTEXT тоже сработает (просто используйте cmd.Parameters.Add("@Content", SqlDbType.Text); в этом случае).

0 голосов
/ 23 февраля 2010

Вы также можете serialize (двоичный файл, а не xml) свой набор данных и сохранить в базе данных.

...