2017-05-22 3 views
-1

J'écris un exemple d'application pour insérer des données dans une base de données SQL Server en utilisant C#. Les données ne persistent pas dans la base de données.SQL Server: les données ne sont pas insérées

Ci-dessous mon code:

conn.Open(); 

SqlCommand cmd = conn.CreateCommand(); 
cmd.CommandType = System.Data.CommandType.Text; 
cmd.CommandText = "Insert into Record (ID,Name) values ('" + txtId.Text + "' , '" + txtName.Text + "')"; 

cmd.ExecuteNonQuery(); 
//cmd.Clone(); 
conn.Close(); 

Les valeurs ne sont pas conservées. Il n'y a pas d'erreur quand j'insère les valeurs. Quand j'ai changé ma commande:

"Insert into Database.dbo.Record (ID,Name) values ('" 

il lance une exception:

syntaxe incorrecte près du mot-clé 'Database'.

Pourquoi ma base de données SQL Server n'est-elle pas mise à jour?

+2

est le nom de la table « Enregistrer »? ... Y a-t-il un message d'erreur? C'est une tâche de base, vous devriez faire des efforts pour trouver le problème. – Galcoholic

+0

Je n'ai pas fait une telle solution en utilisant C#, mais est-il possible que vous ayez à inclure "database.dbo.Record" comme table, au lieu de simplement "Record" ou est-ce que la Connection s'en charge? – Cenderze

+2

Si vous tracez ce code, si vous récupérez le texte de la commande, êtes-vous sûr qu'il est en cours d'exécution? avez-vous exécuté le sql dans SQL directement? – BugFinder

Répondre

0

Votre code tel quel, est peut-être ouvert à l'injection SQL - vous devez utiliser des paramètres.

Vérifiez également les noms de table et les clés primaires, par ex. Si ID est une colonne Identité, elle est générée automatiquement lorsque vous insérez, alors vous n'aurez qu'à INSÉRER INTO Enregistrer (Nom) VALUES ('Bob')

Sinon, si ID est une clé primaire, vous devrez probablement vérifier vous n'essayez pas d'insérer des doublons.

Veuillez utiliser les paramètres! (Ajuster les années SqlDbType si nécessaire)

Vous devez également utiliser une instruction à l'aide sur la connexion de disposer correctement les ressources, et utiliser idéalement une transaction pour les mises à jour:

string sqlQuery = "INSERT INTO Record (ID, Name) VALUES (@id, @name); "; 

using (SqlConnection conn = new SqlConnection(connectionString)) { 
    conn.Open(); 
    SqlTransaction tran = conn.BeginTransaction(); 

    try { 
     SqlCommand command = new SqlCommand(sqlQuery, conn, tran); 

     SqlParameter in1 = command.Parameters.Add("@id", SqlDbType.NVarChar); 
     in1.Value = txtId.Text; 
     SqlParameter in2 = command.Parameters.Add("@name", SqlDbType.NVarChar); 
     in1.Value = txtName.Text; 

     command.ExecuteNonQuery(); 

     tran.Commit(); 
    } catch (Exception ex) { 
     tran.Rollback();  
     //... 
    } 
} 
+0

J'ai essayé de cette façon aussi. Mais ça ne fonctionne pas. En fait, au moment de l'exécution, il est inséré. Mais chaque fois que je vérifie dans ma base de données, cela ne change rien. Y a-t-il quelque chose qui me manque pour me connecter? Et une chose aussi j'utilise la base de données de fichier de base de données de Microsoft SQL Server (SqlClient). –

+0

Si vous pouvez montrer à quoi ressemble votre chaîne de connexion, et la définition de la table? – Kobus

+0

SqlConnection conn = new SqlConnection (@ "Source de données = (LocalDB) \ MSSQLLocalDB; AttachDbFilename = | Répertoire de données | \ Student.mdf; Sécurité intégrée = Vrai"); c'est ma chaîne de connexion. –