Неверный синтаксис рядом с ключевым словом «Пользователь» - PullRequest
2 голосов
/ 27 июня 2011

Ошибка:

Произошло необработанное исключение типа 'System.Data.SqlClient.SqlException' в System.Data.dll
Дополнительная информация: неверный синтаксис рядом с ключевым словом 'Пользователь'.

Код:

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();
        }

    }
}

Ответы [ 2 ]

14 голосов
/ 27 июня 2011

User - это встроенная функция в SQL Server. Вам необходимо заключить имя в квадратные скобки: [User]. Это относится ко всем именам таблиц и другим определяемым пользователем именам, которые сталкиваются с ключевыми словами, зарезервированными словами или встроенными именами, поэтому я подозреваю, что вам также потребуется написать [Order], поскольку ORDER является ключевым словом SQL.

13 голосов
/ 27 июня 2011

«Пользователь» - это зарезервированное слово в SQL Server, поэтому вы должны использовать идентификатор с разделителями для ссылки на вашу таблицу. Попробуйте

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

вместо ... или переименуйте таблицу во что-то, что не зарезервировано.

(Я бы также настоятельно рекомендовал вам не допускать доступа к данным из вашего кода пользовательского интерфейса, правильно распоряжаться соединениями и т. Д., Но это другое дело.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...