2012-05-08 4 views
0

У меня есть база данных (WSS_Content) Sharepoint, но ни одна из них не установлена, и мне нужны ее данные. Каково ваше решение для получения данных? Должен ли я кодировать конвертер для извлечения файлов/ссылок/данных сайтов из двоичных массивов в данные или есть более простой способ? Могу ли я установить новую sharepoint и использовать эту базу данных?Поиск данных Sharepoint

+0

Какие данные вам нужны и что вы будете делать с этим? Если вам просто нужно извлечь документы с сайта, это довольно просто. –

+0

У меня есть файлы doc, docx, jpg, odc, pdf, pptx, zip, rar в этой базе данных. Просто хочу извлечь файлы. – Saber

ответ

2

Я выкопал старое приложение, которое у меня было немного назад, и делает действительно базовое извлечение всех документов из базы данных контента. Это не выборочно, он просто захватывает все, что есть. Затем вы можете выбрать результат, чтобы получить то, что вам нужно.

Я считаю, что исходный код был получен от кого-то другого (я не могу вспомнить, где так не могу их отдать). Я просто немного взломал его. Не стесняйтесь сделать снимок.

Он просто обращается к базе данных напрямую, поэтому вам просто нужно установить его на SQL Server. Сервер SharePoint не требуется.

using System; 
using System.Data.SqlClient; 
using System.IO; 

namespace ContentDump 
{ 
    class Program 
    { 
     // Usage: ContentDump {server} {database} 
     // 
     static void Main(string[] args) 
     { 
      string server = args[0]; 
      string database = args[1]; 
      string dbConnString = String.Format("Server={0};Database={1};Trusted_Connection=True;", server, database); 

      // create a DB connection 
      SqlConnection con = new SqlConnection(dbConnString); 
      con.Open(); 

      // the query to grab all the files. 
      SqlCommand com = con.CreateCommand(); 
      com.CommandText = "SELECT ad.SiteId, ad.Id, ad.DirName," + 
       " ad.LeafName, ads.Content" + 
       " FROM AllDocs ad, AllDocStreams ads" + 
       " WHERE ad.SiteId = ads.SiteId" + 
       " AND ad.Id = ads.Id" + 
       " AND ads.Content IS NOT NULL" + 
       " Order by DirName"; 

      // execute query 
      SqlDataReader reader = com.ExecuteReader(); 

      while (reader.Read()) 
      { 
       // grab the file’s directory and name 
       string DirName = (database + "/" + (string)reader["DirName"]).Replace("//", "/"); 
       string LeafName = (string)reader["LeafName"]; 

       // create directory for the file if it doesn’t yet exist 
       if (!Directory.Exists(DirName)) 
       { 
        Directory.CreateDirectory(DirName); 
        Console.WriteLine("Creating directory: " + DirName); 
       } 

       // create a filestream to spit out the file 
       FileStream fs = new FileStream(DirName + "/" + LeafName, FileMode.Create, FileAccess.Write); 
       BinaryWriter writer = new BinaryWriter(fs); 

       int bufferSize = 1024; 
       long startIndex = 0; 
       long retval = 0; 
       byte[] outByte = new byte[bufferSize]; 

       // grab the file out of the db 
       do 
       { 
        retval = reader.GetBytes(4, startIndex, outByte, 0, bufferSize); 
        startIndex += bufferSize; 
        writer.Write(outByte, 0, (int)retval); 
        writer.Flush(); 
       } while (retval == bufferSize); 

       // finish writing the file 
       writer.Close(); 
       fs.Close(); 

       Console.WriteLine("Finished writing file: " + LeafName); 
      } 

      // close the DB connection and whatnots 
      reader.Close(); 
      con.Close(); 
     } 
    } 
}
+0

Спасибо Nigel. Это именно то, что я искал. – Saber

1

Вы можете попытаться подключить свою базу данных в новой среде sharepoint и webapp с помощью команды stsadm.exe -o addcontentdb -url -databasename. Этот способ используется для миграции базы данных из sharepoint 2007 в 2010 Farms тоже. Затем вы должны увидеть содержимое в URL-адресе webapp

+0

Спасибо за решение. Но извлечение только файлов было проще. – Saber

Смежные вопросы