Вот сообщение от MSDN, объясняющее, как это сделать с помощью SMO:
using System.Data.SqlClient;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string sqlConnectionString = "Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=True";
FileInfo file = new FileInfo("C:\\myscript.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(sqlConnectionString);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
}
}
}
Общим способом обработки такого переноса является пучок git
. См. Резервное копирование гитубского репо .
Со второго (нового) рабочего стола:
git bundle create file:///\\oldDesktop/share/myGitRepo --all
для создания одного локального файла, из которого можно будет клонировать локальное гит-репо.
Примечание: протокол file :///
будет поддерживать UNC-путь Windows (Universal Naming Convention), при этом остальная часть пути будет использовать "" /
"" вместо "" \
"". См. раздел Подключение к локальной сети Windows .
Совпадение является результатом любого отдельного совпадения всего регекса. Группы и захваты имеют какое-либо отношение к группам захвата (каждая (выражение)
внутри регекса), но различаются в том, как они себя ведут. Вот цитата из статьи MSDN о классе Capture, которая объясняет разницу:
-121--4213402-Если вы не применяете квантификатор к захватывая группу, Группа Захватывает свойство возвращает коллекцию CapityCollection с одним объектом Capture, предоставляет информацию о том же захват в качестве объекта Group. Если вы это сделаете применить квантификатор к захвату группа, индекс группы, длина группы, и свойства Group.Value предоставляют информация только о последнем захваченная группа, в то время как захват объекты в коллекции CapityCollection предоставить информацию обо всех захваты субэкспрессии. Пример предоставляет иллюстрацию.
( Source )
Когда мне нужно запустить сценарии SQL, содержащие инструкции GO, я обычно считываю весь файл в строку и разделяю его на массив строк, используя GO в качестве разделителя.
Затем я подключаюсь к базе данных и выполняю каждую инструкцию по порядку.
Это довольно легко и хорошо работает. Убедитесь, что подключение к базе данных открыто во время выполнения всех инструкций. Кроме того, можно рассмотреть возможность их выполнения в транзакции.