Использование SMO. Вам придется играть с нужными вам опциями.
StringBuilder sb = new StringBuilder();
using (SqlConnection connection = new SqlConnection("connectionString")) {
ServerConnection serverConnection = new ServerConnection(connection);
Server server = new Server(serverConnection);
Database database = server.Databases["databaseName"];
Scripter scripter = new Scripter(server);
scripter.Options.ScriptDrops = false;
scripter.Options.WithDependencies = true;
scripter.Options.ScriptData = true;
Urn[] smoObjects = new Urn[1];
foreach (Table table in database.Tables) {
smoObjects[0] = table.Urn;
if (!table.IsSystemObject) {
foreach (string s in scripter.EnumScript(smoObjects)) {
System.Diagnostics.Debug.WriteLine(s);
sb.AppendLine(s);
}
}
}
}
// Write to *.sql file on disk
File.WriteAllText(@".\backup.sql");
Другим простым способом сделать это является резервное копирование базы данных в файлы XML. Для этого используйте DataTable и вызовите WriteXml и WriteXmlSchema. (Схема понадобится позже, чтобы ее можно было импортировать / восстановить тем же способом). Этот метод означает, что вы выполняете резервное копирование по таблице.
private bool BackupTable(string connectionString, string tableName, string directory) {
using (SqlConnection connection = new SqlConnection(connectionString)) {
try {
connection.Open();
}
catch (System.Data.SqlClient.SqlException ex) {
// Handle
return false;
}
using (SqlDataAdapter adapter = new SqlDataAdapter(string.Format("SELECT * FROM {0}", tableName), connection)) {
using (DataTable table = new DataTable(tableName)) {
adapter.Fill(table);
try {
table.WriteXml(Path.Combine(directory, string.Format("{0}.xml", tableName)));
table.WriteXmlSchema(Path.Combine(directory, string.Format("{0}.xsd", tableName)));
}
catch (System.UnauthorizedAccessException ex) {
// Handle
return false;
}
}
}
}
return true;
}
Позже вы можете затем отправить их обратно в нашу базу данных, используя ReadXmlSchema и ReadXml, используя адаптер для заполнения и обновления таблицы в базе данных. Я предполагаю, что вы обладаете знаниями в базовом CRUD, поэтому мне не нужно покрывать эту часть.
Если вы хотите использовать SMO, вот статья Msdn об использовании классов Backup and Restore для резервного копирования и восстановления базы данных. Пример кода используется неформатированным и в VB.NET, но легко переводимым.
Наконец, что может быть проще, поговорите с ИТ-специалистами и узнайте, позволят ли они вам удаленно подключиться или предоставят вам доступ к резервному копированию самостоятельно. Если вы пишете программное обеспечение, и это важный шаг, поговорите с ним и дайте им понять, насколько важно для вас это сделать, так как это уменьшит затраты на то, что вам придется писать собственный инструмент, когда уже существуют отличные инструменты. Тем более, что база данных составляет 100 ГБ, вы можете использовать уже известные вам инструменты.