运行代码并输入值 1 后,我的代码行出现 C# 错误,它一直弹出关键字“表”附近的语法不正确

Posted

技术标签:

【中文标题】运行代码并输入值 1 后,我的代码行出现 C# 错误,它一直弹出关键字“表”附近的语法不正确【英文标题】:C# Error of my line of code that it keep pop out Incorrect syntax near the keyword 'Table" after I run the code and inputted a value of 1 【发布时间】:2021-10-04 01:35:30 【问题描述】:
namespace WindowsFormsApp4

    public partial class Form1 : Form
    
        private const string V = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Simple;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";

        public Form1()
        
            InitializeComponent();
        

        private void button1_Click(object sender, EventArgs e)
        
            const string ConnectionString = V;
            SqlConnection conn1 = new SqlConnection(ConnectionString);
            conn1.Open();
            SqlCommand cmd1 = new SqlCommand("select Id, First Name, Last Name, sum from Table where id=@id", conn1);
            cmd1.Parameters.AddWithValue("Id", textBox1.Text);
            SqlDataReader reader1;
            reader1 = cmd1.ExecuteReader();
            if(reader1.Read())
            
                textBox2.Text = reader1["First Name"].ToString();
                textBox2.Text = reader1["Last Name"].ToString();
                textBox2.Text = reader1["Sum"].ToString();
            
            else
            
                MessageBox.Show("no data found");
            
            conn1.Close();

            
        
    

【问题讨论】:

Table 是保留字,最好为表选择一个不同的名称。否则,将其括在括号中:[Table] Sum 也是保留关键字,First NameLast Name 也需要用括号括起来,因为那个空格。 @TimSchmelter SUM 不是 T-SQL 保留关键字,只是 ODBC Reserved Keyword。但实际上,似乎 OP 应该更改除 Id 之外的所有对象的名称。 不要使用addwithvalue 【参考方案1】:

你的列名在数据库中有空格吗?是“First Name”还是“FirstName”(姓氏的问题相同)?

如果是FirstNameLastName,那么试试这个(我从First NameLastName 中删除了空格,并在sumTable 中添加了括号,因为它们是保留字):

SqlCommand cmd1 = new SqlCommand("select Id, FirstName, LastName, [sum] from [Table] where id=@id", conn1);

如果是空格,那么试试这个:

SqlCommand cmd1 = new SqlCommand("select Id, [First Name], [Last Name], [sum] from [Table] where id=@id", conn1);

请注意,为列名使用保留名称不是一个好习惯。我建议您将列名更改为非保留字。

【讨论】:

括号也应该用于列名。无需删除空间 @AkshayGaonkar 是的,通常使用间隔列名不是一个好习惯。由于他没有提到列名是什么,我认为它没有空格,这是他的错误。你怎么知道他在数据库里有什么? (无论如何我都会更新我的答案) @TimSchmelter 阅读我上面的评论 ^^ 当您假设 OP 的问题时,我们没有证据表明列的名称中实际上没有空格,为什么还要假设他们的性别(我们也没有证据)? First NameFirstName 不一样。如果对象名称真的是First Name,这只会产生一个不同的错误。 为了完整起见,只需在每一列周围加上一个括号。我也不确定SUM-column 是否会在某处引起争议。您还可以提及更改列名以避免这些问题是个好主意。

以上是关于运行代码并输入值 1 后,我的代码行出现 C# 错误,它一直弹出关键字“表”附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

为啥matlab命令行窗口输入1b出现错误

Java或C#调用命令行批处理命令如何获得返回值

如何删除最初显示的innerHTML值

ListView图像有时在winform c#中放错位置并消失

捕获异常

c# 如何运行一段c代码