Maison >développement back-end >C++ >Comment puis-je exécuter efficacement des scripts SQL volumineux avec des commandes GO en C# ?
Exécutez efficacement de gros scripts SQL contenant des commandes GO en C#
Question :
Utiliser SqlCommand.ExecuteNonQuery()
pour exécuter de gros scripts SQL contenant plusieurs lots séparés par des instructions GO est un défi car il interprète GO comme une syntaxe non valide.
Solution 1 : Traitement par lots multiples
Une solution consiste à diviser le script SQL en lots individuels basés sur les lignes GO et à exécuter chaque lot séparément. Bien que cette méthode fonctionne, elle peut être fastidieuse et sujette aux erreurs pour les scripts volumineux.
Solution 2 : Objets de gestion SQL Server (SMO)
Une solution plus efficace consiste à exploiter les objets de gestion SQL Server (SMO), qui prennent en charge nativement le délimiteur de commande GO.
Exemple de code :
<code class="language-csharp">public static void Main() { // SQL连接字符串 string sqlConnectionString = "Integrated Security=SSPI;" + "Persist Security Info=True;Initial Catalog=Northwind;Data Source=(local)"; // 从目录获取SQL脚本 DirectoryInfo di = new DirectoryInfo("c:\temp\sqltest\"); FileInfo[] rgFiles = di.GetFiles("*.sql"); // 使用SMO执行每个脚本 foreach (FileInfo fi in rgFiles) { string script = File.ReadAllText(fi.FullName); using (SqlConnection connection = new SqlConnection(sqlConnectionString)) { Server server = new Server(new ServerConnection(connection)); server.ConnectionContext.ExecuteNonQuery(script); } } }</code>
Bibliothèques supplémentaires :
Une autre option consiste à utiliser la bibliothèque de Phil Haack, qui encapsule la fonctionnalité d'exécution de scripts SQL à l'aide de délimiteurs GO : https://www.php.cn/link/3cdad14c5d7c1e1fa307772a876b42d7
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!