【问题标题】:System.Data.SqlClient.SqlException: 'Incorrect syntax near ','.'System.Data.SqlClient.SqlException:'','附近的语法不正确。'
【发布时间】:2017-06-27 09:12:33
【问题描述】:

我已经创建了这段代码来向数据库添加新记录,但是每次我朗读代码时都会收到这个错误:

System.Data.SqlClient.SqlException: '',' 附近的语法不正确。'

我不知道如何解决这个错误,我在网上查看并尝试了不同的方法来修复它,但没有一个帮助或解决了这个问题。

代码如下:

SqlCommand sdk = new SqlCommand("SELECT ([Id],[Title],[JobInfo],[DateSet],[DateDue],[WhoFor]) FROM Information_Schema.Columns FROM JobInformation", ConnectToDatabase);

ConnectToDatabase.Open();
SqlDataReader reader;
reader = sdk.ExecuteReader();
ConnectToDatabase.Close();

我相信它是第一行代码,但我不知道错误可能在哪里。

【问题讨论】:

  • 你有 两个 FROM 子句,那是合法的 SQL 吗?
  • select 不需要括号,并且有两个from - 你想在这里做什么?
  • 认为你的 SQL 查询不正确。
  • SELECT 来自Information_Schema.Columns 还是来自JobInformation
  • 附带说明,在关闭连接之前,您实际上并没有读取数据

标签: c# sql


【解决方案1】:

我猜你的意思是这样的:

ConnectToDatabase.Open();
using(var sdk = new SqlCommand(
    "SELECT [Id],[Title],[JobInfo],[DateSet],[DateDue],[WhoFor] FROM JobInformation",
    ConnectToDatabase))
using(var reader = sdk.ExecuteReader())
{
    while(reader.Read()) { /* process row */
}
ConnectToDatabase.Close();

但是,您可能会发现使用 dapper 之类的工具会更容易:

var jobs = ConnectToDatabase.Query<JobInfo>(
      "SELECT [Id],[Title],[JobInfo],[DateSet],[DateDue],[WhoFor] FROM JobInformation"
     ).AsList();

(包括打开/关闭在内的所有操作,将列填充到您自己需要创建的 JobInfo 类型)


但是,你说:

我创建了这段代码来向数据库添加新记录

在这种情况下,您需要使用insert,而不是select - 和SqlCommandExecuteNonQuery 方法(或“dapper”的Execute 方法)。

对于插入:

using(var cmd = new SqlCommand(@"
    insert JobInformation(Title, JobInfo, DateSet, DateDue, WhoFor)
    values (@title, @jobInfo, @dateSet, @dateDue, @whoFor)", ConnectToDatabase))
{
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@jobInfo", jobInfo);
    cmd.Parameters.AddWithValue("@dateSet", dateSet);
    cmd.Parameters.AddWithValue("@dateDue", dateDue);
    cmd.Parameters.AddWithValue("@whoFor", whoFor);
    cmd.ExecuteNonQuery();

}

或使用小巧玲珑:

ConnectToDatabase.Execute(@"
    insert JobInformation(Title, JobInfo, DateSet, DateDue, WhoFor)
    values (@title, @jobInfo, @dateSet, @dateDue, @whoFor)",
    new { title, jobInfo, dateSet, dateDue, whoFor});

【讨论】:

  • @jamieshepherd 在哪里?有问题吗?
  • SqlCommand sdk = new SqlCommand("SELECT ([Id],[Title],[JobInfo],[DateSet],[DateDue],[WhoFor]) FROM Information_Schema.Columns FROM JobInformation", ConnectToDatabase );
  • SqlCommand sdk = new SqlCommand("INSERT ([Id],[Title],[JobInfo],[DateSet],[DateDue],[WhoFor]) FROM Information_Schema.Columns FROM JobInformation", ConnectToDatabase );
  • 我也在尝试你的解决方案
  • 我认为在尝试编写任何代码之前,您需要阅读更多关于 sql 语言语法的知识@jamieshepherd ...
猜你喜欢
  • 2021-03-31
  • 2019-07-17
  • 2017-12-08
  • 2014-05-09
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多