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

时间:2017-06-27 09:12:34

标签: c# sql

我已创建此代码以向数据库添加新记录但是,每次我发布代码时都会收到此错误:

  

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

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

1 个答案:

答案 0 :(得分: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 - 和ExecuteNonQuery SqlCommand方法(或Execute方法&#34; dapper&#34;)。

对于插入内容:

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