Exécuter une requête avec des parameters

Je veux exécuter un script .sql partir de C #. Fondamentalement, le script insère une ligne dans plusieurs tables différentes.

Le fait est que j’ai des valeurs en code C # que je dois transmettre à la requête .sql . Ces valeurs seront collectées lors de l’exécution du programme.

Voici la requête que je veux exécuter à partir du code C #:

 INSERT INTO [DB].[dbo].[User]          ([Id]          ,[AccountId]          ,[FirstName]          ,[LastName]          ,[JobTitle]          ,[PhoneNumber]          )    VALUES          ('00A640BD-1A0D-499D-9155-BA2B626D7B68'          ,'DCBA241B-2B06-48D7-9AC1-6E277FBB1C2A'          ,'Mark'          ,'Wahlberg'          ,'Actor' ,'9889898989']) GO 

Les valeurs varieront de temps en temps, c’est-à-dire qu’elles sont capturées en code C # et doivent être transmises.

Est-ce que quelqu’un peut m’aider s’il vous plaît à faire cela? Merci beaucoup.

Vous pouvez vous ouvrir ici aux attaques par injection SQL . La meilleure pratique consiste donc à utiliser les parameters suivants:

 using (SqlConnection dbConn = new SqlConnection(connectionSsortingng)) { dbConn.Open(); using (SqlTransaction dbTrans = dbConn.BeginTransaction()) { try { using (SqlCommand dbCommand = new SqlCommand("insert into [DB].[dbo].[User] ( [Id], [AccountId], [FirstName], [LastName], [JobTitle], [PhoneNumber] ) values ( @id, @accountid, @firstname, @lastname, @jobtitle, @phonenumber );", dbConn)) { dbCommand.Transaction = dbTrans; dbCommand.Parameters.Add("id", SqlType.VarChar).Value = id; dbCommand.Parameters.Add("accountid", SqlType.VarChar).Value = accountId; dbCommand.Parameters.Add("firstname", SqlType.VarChar).Value = firstName; dbCommand.Parameters.Add("lastname", SqlType.VarChar).Value = lastName; dbCommand.Parameters.Add("jobtitle", SqlType.VarChar).Value = jobTitle; dbCommand.Parameters.Add("phonenumber", SqlType.VarChar).Value = phoneNumber; dbCommand.ExecuteNonQuery(); } dbTrans.Commit(); } catch (SqlException) { dbTrans.Rollback(); throw; // bubble up the exception and preserve the stack trace } } dbConn.Close(); } 

Ceci est un bon article pour les débutants avec ADO.Net

EDITER – À titre d’information supplémentaire, j’y ai ajouté une transaction . Par conséquent, si la commande SQL échoue, elle sera annulée.

  using SqlCommand cmd= conn.CreateCommand()) { cmd.CommandText = @"INSERT INTO TABLE (COLUMNS) VALUES (@Id, @account etc... cmdUser.Parameters.Add(new SqlParameter("@User", SqlDbType.UniqueIdentifier) { Value = UserTypeID }); cmdUser.Parameters.Add(new SqlParameter("@Id", SqlDbType.UniqueIdentifier) { Value = ApprovalTypeID }); cmdUser.Parameters.Add(new SqlParameter("@AccountId", SqlDbType.UniqueIdentifier) { Value = UserID }); cmdUser.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 100) { Value = Name }); cmdUser.Parameters.Add(new SqlParameter("@JobTitle", SqlDbType.NVarChar, 100) { Value = Surname }); cmdUser.Parameters.Add(new SqlParameter("@PhoneNumber", SqlDbType.Bit) { Value = Active }); cmdUser.ExecuteNonQuery(); } 
  try { using (SqlConnection cn = new SqlConnection(this.ConnectionSsortingng)) { SqlCommand cmd = new SqlCommand("Insert_User", cn); cmd.CommandType = CommandType.StoredProcedure; if (cn.State != ConnectionState.Open) cn.Open(); cmd.Parameters.Add("Id", SqlDbType.NVarChar).Value = "00A640BD-1A0D-499D-9155-BA2B626D7B68"; cmd.Parameters.Add("AccountId", SqlDbType.NVarChar).Value = "DCBA241B-2B06-48D7-9AC1-6E277FBB1C2A"; cmd.Parameters.Add("FirstName", SqlDbType.NVarChar).Value = "Mark"; cmd.Parameters.Add("LastName", SqlDbType.NVarChar).Value = "Wahlberg"; cmd.Parameters.Add("JobTitle", SqlDbType.NVarChar).Value = "Actor"; cmd.Parameters.Add("PhoneNumber", SqlDbType.NVarChar).Value = "9889898989"; return cmd.ExecuteNonQuery(); } } catch (Exception ex) { throw new Exception(ex.Message); } 

et pour les procédures stockées, en sql:

  create procedure [Insert_User] ( @id as nvarchar(100), @accid as nvarchar(100), @fname as nvarchar(100), @lname as nvarchar(100), @jobtitle as nvarchar(100), @phone as nvarchar(100) ) INSERT INTO [DB].[dbo].[User] ([Id] ,[AccountId] ,[FirstName] ,[LastName] ,[JobTitle] ,[PhoneNumber] ) VALUES (@id ,@accid ,@fname ,@lname ,@jobtitle ,@phone]) 

De plus, vous pouvez utiliser des zones de texte ou d’autres contrôles de type d’entrée pour définir des valeurs. Vous pouvez modifier à votre guise uniqueidentifier , tel que uniqueidentifier , int , etc. Si une ou plusieurs valeurs sont définies comme identifire, par exemple. AccountID, supprimez-les de la requête.

Franchement, ADO.NET rend difficile la réalisation de tâches de ce type. Des outils comme Dapper existent pour rendre cela plus facile :

 dbConn.Execute( @"insert into [DB].[dbo].[User] ( [Id], [AccountId], [FirstName], [LastName], [JobTitle], [PhoneNumber] ) values ( @id, @accountId, @firstName, @lastName, @jobTitle, @phoneNumber )", new { id, accountId, firstName, lastName, jobTitle, phoneNumber }); 

Ceci gérera tous les paramétrages pour vous , efficacement, efficacement et en toute sécurité.

Des API similaires permettent d’exécuter des requêtes et de renseigner des objects.

Vous aurez besoin de la classe System.Data.SqlCommand .

Modifiez les valeurs fixes en parameters nommés. Par exemple:

INSERT INTO [TABLE] (Colonne1) valeurs (@ Valeur1) // la @ Valeur1 est le paramètre nommé

Exemple:

 var connection = new SqlConnection("connectionssortingng"); var command = connection.CreateCommand(); command.CommandText = "insert...."; // sql command with named parameters // set the named parameter values command.Parameters["@Value1"] = "Mark wa..."; // execute command.ExecuteNonQuery(); 

Référence SqlCommand: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx