2016-08-19 1 views
-3
public string InsertStudent(Student student) 
{ 
    string message = ""; 
    SqlConnection connection = new SqlConnection(connectionString); 

    string query = "insert into Students values(@regNo, @name, @email, @departmentId)"; 

    SqlCommand command = new SqlCommand(query, connection); 
    command.Parameters.Clear(); 

    command.Parameters.Add("regNo", SqlDbType.VarChar, 50).Value = student.RegNo; 

    //////////////////or////////////// 
    command.Parameters.Add("name", SqlDbType.VarChar); 
    command.Parameters["name"].Value = student.Name; 

    command.Parameters.Add("email", SqlDbType.VarChar); 
    command.Parameters["email"].Value = student.Email; 

    command.Parameters.Add("departmentId", SqlDbType.Int); 
    command.Parameters["departmentId"].Value = student.DepartmentId; 

    connection.Open(); 
    int rowAffected = command.ExecuteNonQuery(); 
    connection.Close(); 
} 

Ma question: quand j'écrisComment fonctionne SqlCommand avec les paramètres?

command.ExecuteNonQuery() 

ou

command.ExecuteReader() 

comment la référence de commande trouver les références ou les emplacements de mémoire nouvellement créés de SqlParameter objets?

Pouvez-vous dessiner des images de références de ces objets et de leurs relations dans la mémoire de tas et la mémoire de pile?

probablement ma réponse est l'image suivante:

enter image description here

+2

Avez-vous cherché de la documentation? – astidham2003

+0

Qu'est-ce qui vous fait penser que les différentes façons d'ajouter un paramètre peuvent faire une différence? Au moment où le compilateur est fini, ils ont l'air de pouvoir finir tous de la même façon. Et vous ne voulez vraiment pas que je dessine une image .. – stuartd

+0

Vous pourriez utiliser le réflecteur .NET pour regarder l'IL si vous êtes vraiment si curieux – reggaeguitar

Répondre

-2

Il y a quelques façons. Voir ce lien:

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx

L'exemple suivant montre comment créer un paramètres SqlCommand et ajouter:

private static void UpdateDemographics(Int32 customerID, 
    string demoXml, string connectionString) 
{ 
    // Update the demographics for a store, which is stored 
    // in an xml column. 
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics " 
     + "WHERE CustomerID = @ID;"; 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     SqlCommand command = new SqlCommand(commandText, connection); 
     command.Parameters.Add("@ID", SqlDbType.Int); 
     command.Parameters["@ID"].Value = customerID; 

     // Use AddWithValue to assign Demographics. 
     // SQL Server will implicitly convert strings into XML. 
     command.Parameters.AddWithValue("@demographics", demoXml); 

     try 
     { 
      connection.Open(); 
      Int32 rowsAffected = command.ExecuteNonQuery(); 
      Console.WriteLine("RowsAffected: {0}", rowsAffected); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
} 
+2

Les réponses aux liens uniquement sont déconseillées car le lien peut changer – reggaeguitar

1

Les paramètres sont stockés dans command.Parameters. La commande utilise cette collection pour énumérer tous les paramètres et les envoyer sur le réseau.