L'insertion dans la table à partir d'un formulaire en asp.net
J'ai une page que vous remplissez quelques informations et en fonction de cette information, je insérer une nouvelle ligne dans la base de données. Voici la capture d'écran du formulaire qui est rempli:
Voici mon code à insérer dans la base de données lorsqu'il est cliqué bouton envoyer:
protected void CreateCourseButton_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=University;Integrated Security=True;Pooling=False";
string query1 = "insert into Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite) values ("
+ courseID.Text + "," + courseName.Text + "," + studyLevel.SelectedValue + "," + capacity.Text + "," + "Admin," + credits.Text + "," + prereq.Text + ")";
SqlCommand cmd1 = new SqlCommand(query1, con);
con.Open();
cmd1.ExecuteNonQuery();
con.Close();
}
Le problème est, je reçois le message d'erreur suivant lorsque je clique sur envoyer:
Server Error in '/Bannerweb' Application.
Incorrect syntax near the keyword 'to'.
Description: An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error and where
it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near the
keyword 'to'.
Source Error:
Line 32: SqlCommand cmd1 = new SqlCommand(query1, con);
Line 33: con.Open();
Line 34: cmd1.ExecuteNonQuery();
Line 35: con.Close();
Line 36: }
Source File: c:\Banner\Bannerweb\Pages\CreateCourse.aspx.cs Line: 34
Stack Trace:
[SqlException (0x80131904): Incorrect syntax near the keyword 'to'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean
breakConnection) +2084930
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean
breakConnection) +5084668
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +234
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,
SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj) +2275
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean
async) +228
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result,
String methodName, Boolean sendToPipe) +326
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137
CreateCourse.CreateCourseButton_Click(Object sender, EventArgs e) in
c:\Banner\Bannerweb\Pages\CreateCourse.aspx.cs:34
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
La ligne 34 est:
cmd1.ExecuteNonQuery();
Quelqu'un peut m'aider avec cette erreur?
Grâce
Essayez et imprimer que
C'est une partie du problème avec amputation des requêtes SQL comme vous êtes, vous vous retrouvez dans des situations où la requête SQL n'est pas "très" match up. Vous devez utiliser des requêtes paramétrées et de laisser le fournisseur de faire la plupart du travail pour vous. Je prendrais la requête de la production et de l'exécuter sur la base de données vous - même: vous verrez ce que le problème est là.
montrez-moi le
la ligne 34 est cmd1.ExecuteNonQuery(); vous pouvez voir aussi dans le édité question
il suffit de changer votre requête d'insertion comme je l'ai mentionné, et vérifiez que vous avez trouvé cette erreur à nouveau, ou, ni,si votre champ de données d'id de type nvarchar ou varchar ensuite utiliser
query1
, vous pouvez voir par vous-même. Astuce: l'esprit de la cite.C'est une partie du problème avec amputation des requêtes SQL comme vous êtes, vous vous retrouvez dans des situations où la requête SQL n'est pas "très" match up. Vous devez utiliser des requêtes paramétrées et de laisser le fournisseur de faire la plupart du travail pour vous. Je prendrais la requête de la production et de l'exécuter sur la base de données vous - même: vous verrez ce que le problème est là.
montrez-moi le
Line: 34
de CreateCourse.aspx.cs
pagela ligne 34 est cmd1.ExecuteNonQuery(); vous pouvez voir aussi dans le édité question
il suffit de changer votre requête d'insertion comme je l'ai mentionné, et vérifiez que vous avez trouvé cette erreur à nouveau, ou, ni,si votre champ de données d'id de type nvarchar ou varchar ensuite utiliser
'"++"'
comme ça dans votre requête pour ce champ.
OriginalL'auteur yrazlik | 2013-05-14
Vous devez vous connecter pour publier un commentaire.
Modifier votre
Insert
requête commeDeuxième problème
Si c'est de l'enregistrer, puis
ExecuteNonQuery
sera de retour que vous1
d'autre0
, de sorte que par le rendement de la valeur que vous pouvez vérifier et d'appliquer votre condition.Espère que vous comprenez.
vous pouvez prendre une étiquette pour indiquer le succès ou l'échec de texte... label1.Texte="Inséré"
Ce code est fortement vulnérable à une injection sql. Éviter de construire sql dynamique par la concaténation de chaîne. Utilisation des paramètres sql si possible.
oui, je sais, mais c'est juste une allusion à l'utilisateur.De toute façon je vous remercie.
OriginalL'auteur Rahul
Cette erreur se produit parce que vous êtes manquant " entre les valeurs insérées. De toute façon la meilleure approche est d'utiliser
Parameters
collection comme:ExecuteNonQuery()
retourne le nombre de lignes affectées donc, si elle renvoie la valeur 0 signifie aucune ligne n'a été inséré. Plus iciCela devrait être la bonne réponse.
OriginalL'auteur gzaxx
Ressemble, vous devez ajouter des guillemets autour de
Course Name
. Également utiliserSQL parameterized queries
de sorte que vous ne sont pas vulnérables àSQL Injection
.Permettra d'évaluer:
http://johnhforrest.com/2010/10/parameterized-sql-queries-in-c/
Merci, j'ai résolu le problème. J'ai une petite question: je veux faire quelque chose comme, si (l'insertion dans la base de données est réussie) de faire autre chose, faire autre chose. Est-il une fonction booléenne de ce genre pour vérifier?
ExecuteNonQuery() renvoie un entier (Nombre de lignes affectées) ... vous pouvez faire:
var results = cmd1.ExecuteNonQuery();
Et de vérifier ensuiteif results > 1
merci!!!!
pas de problème. Si cette réponse aidé s'il vous plaît marquer comme réponse.
OriginalL'auteur Darren
Cette erreur est probablement à venir à partir de la
Course name
champ, où vous avez espaces de la valeur. Simplement de le fixer, vous pouvez envelopper les valeurs de laTextBoxes
dans le'
char.Mais, c'est une énorme faille de sécurité. De nos jours, vous devez utiliser les paramètres, comme votre insert doit ressembler à:
Vous devez utiliser les paramètres de vous protéger contre les attaques par injection SQL.
Je pense que vous pouvez utiliser 2 choses. 1 Est d'utiliser la valeur de retour de la
cmd1.ExecuteNonQuery
, à partir de msdn: Pour INSÉRER ... déclarations, la valeur de retour est le nombre de lignes affectées par la commande. ... Pour tous les autres types de déclarations, la valeur de retour est -1. Si une annulation survient, la valeur de retour est également -1.. Et 2 vous pouvez prendre l'une exception à faire de la gestion d'erreur, si c'est ce que vous avez besoin (mais ne pas utiliser les exceptions pour contrôler le flux d'exécution normale)OriginalL'auteur oleksii
Vous devez passer de la valeur de tous les contrôle à l'intérieur de
'
mise à Jour de votre requête sql comme ceci://retourne le nombre de ligne effectuée par requête
vérifier ici pour plus de détails.
OriginalL'auteur Arshad
Essayer cette
Votre syntaxe de la requête est totalement faux.
OriginalL'auteur Sagar Hirapara
ce qui est mauvais dans ce
OriginalL'auteur Nitin