-1
votes

C # system.data.sqlclient.sqxception: 'Syntaxe incorrecte près du mot clé' Table '.'

Je crée une table nommée table avec des membres (prénom, nom de famille, adresse). Le programme jette l'erreur "Syntaxe incorrecte à proximité du mot clé" Table "". L'application consiste à insérer les données dans la table. Le code est destiné au nouveau gestionnaire d'exception Button.

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace Week4
{
    public partial class Form1 : Form
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\cvyc8\Documents\Testing.mdf;Integrated Security=True;Connect Timeout=30");
        public Form1()
        {
            InitializeComponent();
        }

        private void txtSearch_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnNew_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into [Member] values ('" + txtFirstName.Text + "', '" + txtLastName.Text + "', '" + txtAddress.Text + "')";
            cmd.ExecuteNonQuery();
            con.Close();

            MessageBox.Show("Member added successfully");
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {

        }

        private void btnCancel_Click(object sender, EventArgs e)
        {

        }

        private void btnSave_Click(object sender, EventArgs e)
        {

        }
    }
}


5 commentaires

[Table] et SQL Injection et vous avez Extra )


Je vois que vous avez mis à jour votre nom de table de 'Table' à '[membre]'. Si vous obtenez toujours exactement le même message d'erreur qui indique le mot-clé «Table», vous n'exécutez pas votre nouveau code.


@TOMC, nouvelle erreur, nom de colonne ou numéro de valeurs fournies ne correspond pas à la définition de la table. '


Essayez de définir un point d'arrêt et de passer à travers. Le message est explicite et dit «Table», vous n'exécutez donc pas le commandement de commandement que vous pensez être.


Alerte d'injection SQL - Vous devriez pas Concaténate Ensemble vos instructions SQL - Utilisez Queries paramétrisées pour éviter l'injection SQL - Consultez Little Bobby Tables


3 Réponses :


0
votes

Table est un mot clé réservé dans SQL, y compris MSSQL.


2 commentaires

J'ai créé une nouvelle table appelée membre. Toujours d'erreur: Mise à jour CMD.COMMANDText = "Insérez-la dans les valeurs [Membre] ('" + txtfirstname.text + "' '",' "+ txtlastname.text +" "," "+ txtaddress.text +" ') ";


Dis-il "syntaxe incorrecte près du mot clé" Table '"? Si oui, vous n'exécutez pas le nouveau code.



0
votes

L'erreur est générale car elle n'est pas capable de comprendre le "membre]" dans votre code. Cela semble suspect dans [Membre]. Votre nom de table est table , mais vous ne pouvez pas l'utiliser car il s'agit d'un mot-clé réservé. Essayez de vous écrire . Assurez-vous que votre table correspond à celle des cas (supérieure et inférieure) avec celle de votre table de base de données.

espère que cela aide.


2 commentaires

Il y a eu une certaine confusion son @rohan_rao parce que l'OP a modifié le code de "Table" à "membre" après son indiquer que "Table" est un mot réservé. (Par lequel votre solution échouerait aussi).


@Tomc l'a eu. Merci d'avoir souligné. J'ai changé le nom de la table en membre.



1
votes

Vous devez utiliser des paramètres pour éviter l'injection SQL

string sql = "insert into Member(col1, col2, col3) values(@val1, @val2, @val3)";

using (SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\cvyc8\Documents\Testing.mdf;Integrated Security=True;Connect Timeout=30"))
{
  connection.Open();
  using (SqlCommand cmd= new SqlCommand(sql, connection))
  {
     md.Parameters.Add("@val1", SqlDbType.Varchar, 50).value = txtFirstName.Text;  
     cmd.Parameters.Add("@val2", SqlDbType.Varchar, 50).value =  txtLastName.Text;
     cmd.Parameters.Add("@val3", SqlDbType.Varchar, 50).value = txtAddress.Text;
     cmd.ExecuteNonQuery();
  }
     MessageBox.Show("Member added successfully");
}


7 commentaires

Appelez mes informations de connexion deux fois? Je l'appelle dans la classe de 1 de 1.


@CVYCVY NO BESOIN DE L'APPELER LE TROIS DEUXIMME .. VÉRIFIEZ LA RÉPONSE MISE À JOUR


Exceptions de lancement "Exécutenonquery nécessite une connexion ouverte et disponible. L'état actuel de la connexion est fermé."


D'accord, vérifiez la réponse mise à jour .. Il suffit d'ouvrir la connexion comme connexion.open ();


Désolé la dernière question et je recherche avant que je demande, mais maintenant je reçois un nom de colonne invalide.


col1 doit être le même nom que votre nom de colonne de table.


Merci d'avoir eu un domaine d'identification que j'ai créé une nouvelle base de données sans elle et cela a fonctionné.