Sintassi errata vicino alla parola chiave “Utente”

L’errore è:

Si è verificata un’eccezione non gestita di tipo “System.Data.SqlClient.SqlException” in System.Data.dll
Ulteriori informazioni: syntax errata vicino alla parola chiave “Utente”.

Il codice è:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form1 : Form { SqlConnection conn; SqlDataAdapter GameDA; SqlDataAdapter DetailDA; DataSet DetailDS; SqlCommandBuilder cmdBuilder; SqlDataAdapter UserDA; SqlDataAdapter AdministratorDA; SqlDataAdapter OrderDA; DataSet OrderDS; SqlCommandBuilder cmdBuilder2; public Form1() { InitializeComponent(); conn = new SqlConnection("Data Source=HOME-AC284121FE\\SQLEXPRESS;Initial Catalog=GameShop;Integrated Security=SSPI;"); SqlCommand command1 = new SqlCommand("SELECT * FROM Game", conn); GameDA = new SqlDataAdapter(command1); SqlCommand command2 = new SqlCommand("SELECT * FROM Detail WHERE GameID = @GameID", conn); command2.Parameters.Add(new SqlParameter("@GameID", SqlDbType.Int)); DetailDA = new SqlDataAdapter(command2); SqlCommand command3 = new SqlCommand("SELECT * FROM Administrator", conn); AdministratorDA = new SqlDataAdapter(command3); SqlCommand command4 = new SqlCommand("SELECT * FROM User", conn); UserDA = new SqlDataAdapter(command4); SqlCommand command5 = new SqlCommand("SELECT * FROM Order WHERE UserID = @UserID", conn); command5.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int)); OrderDA = new SqlDataAdapter(command5); cmdBuilder2 = new SqlCommandBuilder(OrderDA); cmdBuilder = new SqlCommandBuilder(DetailDA); } private void Form1_Load(object sender, EventArgs e) { DetailDS = new DataSet(); OrderDS = new DataSet(); GameDA.Fill(DetailDS, "Game"); **UserDA.Fill(OrderDS, "User"); // <-- Error** AdministratorDA.Fill(OrderDS, "Administrator"); comboBoxGame.DisplayMember = "Name"; comboBoxGame.ValueMember = "GameID"; comboBoxGame.DataSource = DetailDS.Tables["Game"]; dataGridView.DataSource = DetailDS.Tables["Detail"]; dataGridView.Columns["GameID"].Visible = false; dataGridView.Columns["DetailID"].Visible = false; } private void comboBoxGame_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxGame.SelectedValue != null) if (DetailDS.Tables.Contains("Detail")) { DetailDS.Tables["Detail"].Clear(); } DetailDA.SelectCommand.Parameters[0].Value = comboBoxGame.SelectedValue; DetailDA.Fill(DetailDS, "Detail"); } private void buttonExit_Click(object sender, EventArgs e) { this.Close(); } } } 

User è una funzione integrata in SQL Server. È necessario circondare il nome con parentesi quadre: [User] . Questo vale per tutti i nomi di tabelle e altri nomi definiti dall’utente che si scontrano con parole chiave, parole riservate o nomi predefiniti, quindi sospetto che sia necessario scrivere anche [Order] , poiché ORDER è una parola chiave SQL.

“Utente” è una parola riservata in SQL Server, quindi è necessario utilizzare un identificatore delimitato per fare riferimento alla tabella. Provare

 SqlCommand command4 = new SqlCommand("SELECT * FROM [User]", conn); 

invece … o rinominare la tabella con qualcosa che non è riservato.

(Inoltre, ti consiglio vivamente di mantenere l’accesso ai dati fuori dal tuo codice UI, di smaltire le connessioni correttamente, ecc … ma è diverso.)