syntaxe incorrecte près ” guillemets non fermés après la chaîne de caractères ‘)’

J’ai créé un formulaire Web à l’aide de C # dans Visual Web Dev 2010 Express et il contient des zones de texte / étiquettes (basées sur les cases à cocher), mais lorsque j’exécute le code, la commande SQL échoue. Le code a fonctionné avant d’utiliser 3 zones de texte, mais ne semble pas fonctionner lorsque je développe le code.

Choses que j’ai essayées:

Lorsque googler quelqu’un a dit quelque chose à propos des guillemets comme étant un problème (et l’erreur reflète cela), mais si je supprime toutes les citations de la commande SQL, cela échoue, mais je '"+datahere+"' qu’il devait toujours s’agir de '"+datahere+"' est-ce vrai?

Je vais également citer tout mon code en retard pour le formulaire Web en question au-dessous de l’erreur. L’erreur ressemble à ceci lorsque je lance un ‘débogage’:

Syntaxe incorrecte près de ‘t’. Unclosed guillemet après la chaîne de caractères ‘)’.

Description: une exception non gérée s’est produite lors de l’exécution de la demande Web en cours. Consultez la trace de la stack pour plus d’informations sur l’erreur et son origine dans le code.

Détails des exceptions: System.Data.SqlClient.SqlException: Syntaxe incorrecte près de ‘t’. Unclosed guillemet après la chaîne de caractères ‘)’.

Erreur de source:

 Line 40: } Line 41: SqlCommand cmd = new SqlCommand("insert into sicknesstest values('"+txtname.Text+"','"+txtgrade.Text+"','"+txtdepot.Text+"','"+txtillness.Text+"','"+txtabsence.Text+"','"+txtcontactby.Text+"','"+txtupdate.Text+"','"+txtdetails.Text+"','"+txtresumedate.Text+"','"+txtdetail.Text+"','"+txtmedonreturn.Text+"','"+txtreporter.Text+"','"+txtdateofcontact.Text+"','"+txtresumeddate.Text+"')", con); Line 42: cmd.ExecuteNonQuery(); Line 43: con.Close(); Line 44: Label1.Visible = true; 

Fichier source: C: \ Utilisateurs \ MYNAME \ Documents \ Visual Studio 2010 \ Projects \ SicknessDBNewSite \ SicknessDBNewSite \ WebForm2.aspx.cs Ligne: 42

Trace de la stack:

 [SqlException (0x80131904): Incorrect syntax near 't'. Unclosed quotation mark after the character ssortingng ')'.] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1791910 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5347106 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +546 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1693 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(Ssortingng methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +869 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Ssortingng methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +413 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +163 SicknessDBNewSite.WebForm2.Button1_Click(Object sender, EventArgs e) in C:\Users\MYNAME\Documents\Visual Studio 2010\Projects\SicknessDBNewSite\SicknessDBNewSite\WebForm2.aspx.cs:42 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9653178 System.Web.UI.WebControls.Button.RaisePostBackEvent(Ssortingng eventArgument) +103 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(Ssortingng eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, Ssortingng eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724 

Code derrière: webform2.aspx

        .style1 { width: 72%; } .style2 { width: 443px; } .style3 { text-align: center; text-decoration: underline; } .style4 { width: 443px; height: 65px; } .style5 { height: 65px; } .style6 { text-align: center; }    

Test Form Submission

Name
Grade
Depot
Nature of Illness?
Appointment made to see doctor (Yes or No)?
Medication Taken (Yes or No)?
Expected length of absence?
If not contacted by staff member, who contacted on their behalf?
Likely resumption date?
Contact telephone number
Latest update date
Details
Resumption Date
Detail
Is the person still on medication at the time of resumption?
Controller / Planner's name
Date of contact
Date and time of next shift
 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="" SelectCommand="SELECT * FROM [sicknesstest]">

webform2.aspx.cs

  using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Configuration; namespace SicknessDBNewSite { public partial class WebForm2 : System.Web.UI.Page { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionSsortingngs["ConnectionSsortingngTestFormSubmission"].ConnectionSsortingng); protected void Page_Load(object sender, EventArgs e) { con.Open(); } protected void Button1_Click(object sender, EventArgs e) { if (RadioAppointmentYes.Checked) { LabelAppointment.Text = "Yes"; } else if (RadioAppointmentNo.Checked) { LabelAppointment.Text = "No"; } if (RadioMedicationYes.Checked) { LabelAppointment.Text = "Yes"; } else if (RadioMedicationNo.Checked) { LabelAppointment.Text = "No"; } SqlCommand cmd = new SqlCommand("insert into sicknesstest values('"+txtname.Text+"','"+txtgrade.Text+"','"+txtdepot.Text+"','"+txtillness.Text+"','"+LabelAppointment.Text+"','"+LabelMedication.Text+"','"+txtabsence.Text+"','"+txtcontactby.Text+"','"+txtupdate.Text+"','"+txtdetails.Text+"','"+txtresumedate.Text+"','"+txtdetail.Text+"','"+txtmedonreturn.Text+"','"+txtreporter.Text+"','"+txtdateofcontact.Text+"','"+txtresumeddate.Text+"')", con); cmd.ExecuteNonQuery(); con.Close(); Label1.Visible = true; Label1.Text = "Your Data has been stored successfully! Click here to view"; txtname.Text = ""; txtgrade.Text = ""; txtdepot.Text = ""; txtillness.Text = ""; txtabsence.Text = ""; txtcontactby.Text = ""; txtupdate.Text = ""; txtdetails.Text = ""; txtresumedate.Text = ""; txtdetail.Text = ""; txtmedonreturn.Text = ""; txtreporter.Text = ""; txtdateofcontact.Text = ""; txtresumeddate.Text = ""; } } } 

– Datesource:

WebConfig:

La firebase database s’exécute localement sur ma machine en tant que “baie de test” et fonctionne à perte de vue.

  

92,7% (a) de tous les problèmes d’exécution SQL deviennent évidents si vous sortez la chaîne avant d’essayer de l’exécuter.

Il y a des chances que vous ayez une citation errante quelque part dans vos champs de saisie, pas nécessairement malveillante – cela pourrait être dû à des choses telles que oh no, we won't go ou le code doesn't work ou contact Mr O'Rourke .

Cela signifie faire quelque chose comme:

 ssortingng strcmd = "insert into ..."; // Examine/output strcmd here. SqlCommand cmd = new SqlCommand(strcmd); cmd.ExecuteNonQuery(); 

Ensuite, une fois que tout fonctionne, recherchez les deux termes “attaque par injection SQL” et “instructions préparées SQL”. À un moment donné, vous voudrez commencer à utiliser ce dernier pour empêcher le premier.


(a) Chiffre sorti de nulle part, la valeur réelle peut varier 🙂

Ma suggestion serait d’utiliser le paramètre dans la requête au lieu de la concaténation. Voici un exemple d’utilisation de paramètre dans une requête SQL:

 IDbCommand command = conn.CreateCommand(); command.CommandText = "SELECT * FROM M_ITEM_SERIAL WHERE ITSR_PLANT_ID = @plantId"; IDbDataParameter plantIdParam = command.CreateParameter(); plantIdParam.ParameterName = "@plantId"; plantIdParam.Direction = ParameterDirection.Input; plantIdParam.Value = plantId; command.Parameters.Add(plantIdParam); 

Essayez de reconstruire votre déclaration. Et en c #, je ne concatinerais jamais de telles chaînes, veuillez utiliser Ssortingng.Format pour cela. En général, vous ne devriez même pas transmettre le paramètre de cette manière à la firebase database, à cause de l’injection SQL. Essayez d’utiliser SqlParameter .

Je pense que votre problème est dû à des valeurs erronées dans certaines SqlParameter . SqlParameter ne peut pas se produire lorsque vous utilisez SqlParameter .

Vous devriez lire ceci SO-Answer: Insérer des valeurs dans une firebase database SQL Server en utilisant ado.net via C #