2012-06-24 4 views
0

Je viens de commencer à utiliser SQL Server 2008. J'ai une application winforms qui doit insérer des données de l'application dans la base de données et certaines valeurs de zone de texte peuvent être vides. Après googling pour chercher comment faire que j'ai trouvé quelque chose mais je voudrais une explication.Insérer une ligne dans SQL Server avec C# Winforms

Je trouve ce code d'insérer l'enregistrement dans DB (excluant le code de connexion)

stringInsert += "INSERT INTO MyDatabase(dateTime, Name, Surname)"; 
stringInsert += "VALUES(@Date, @NameString, @SurnameString)"; 

SqlCommand cmd = new SqlCommand(stringInsert, con); 

cmd.CommandType = CommandType.Text; 
cmd.Parameters.Add(new SqlParameter("@Date", strTime)); 
cmd.Parameters.Add(new SqlParameter("@Name", StringName)); 
cmd.Parameters.Add(new SqlParameter("@Surname", StringSurname)); 

if (string.IsNullOrEmpty(StringName)) 
    cmd.Parameters.Add(new SqlParameter("@Name", DBNull.Value.ToString())); 
else 
    cmd.Parameters.Add(new SqlParameter("@Name", StringName)); 

Mais quelqu'un d'autre a écrit que la méthode cmd.Parameters.AddWithValue("@Name" , StringName);

faire le cas ailleurs en automatique parce que si StringName est nul ou vide il définit DBNull.Value

maintenant, mes questions sont les suivantes:

  1. Je ne comprends pas comment cmd.Parameters.Add(new SqlParameter("@Name", StringName)); modifier stringInsert en StringName. Le "@Name" c'est seulement une partie de la chaîne alors peut-être que le symbole "@" fait quelque chose que je ne connais pas? Normalement, j'utilise le symbole @ quand j'ai besoin d'exclure l'échappement de cette façon @ "c: \ home"

  2. est-il correct d'utiliser cmd.Parameters.AddWithValue("@Name" , StringName); même si le StringName est vide ou nul?

  3. est-ce la manière correcte de soumettre des données dans SQL Server DB avec beaucoup de zone de texte dans une application WinForm?

Merci

Répondre

2

1) le @Name est un espace réservé. Vous demandez à NET Engine de remplacer l'espace réservé @Name par la valeur du même paramètre nommé. (Ceci est différent pour les fournisseurs ADO NET qui ne supportent pas les paramètres nommés)
2) Si vous voulez insérer une valeur NULL dans la base de données, vous devez utiliser DBNull.Value, donc votre code devrait être cmd.Parameters.AddWithValue("@Name" , string.IsNullOrEmpty(StringName) ? DBNull.Value : StringName);
3) Oui, ceci est la bonne façon d'y aller. Toujours utiliser une requête paramétrée. Et using déclarations`

+0

Merci beaucoup! Bonne journée! – user1107078

Questions connexes