【问题标题】:C# insert statementC# 插入语句
【发布时间】:2014-11-14 09:31:04
【问题描述】:

我对 C# 和 .NET 应用程序有点陌生。我与视觉工作室合作并拥有这张桌子:

CREATE TABLE [dbo].[Table] (
    [Id]    INT           NOT NULL,
    [Meno]  NVARCHAR (50) NULL,
    [Datum] DATETIME      NULL,
    [Cas]   INT           NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

现在我有一个简单的插入

public void NahrajSkore(string cas)
        {
            using (var con = new SqlConnection(cns)) 
            {
                con.Open();

                var inset = new SqlCommand("Insert into Table values(@name,@date,@res)", con);
                inset.Parameters.Add("@name", SqlDbType.VarChar);
                inset.Parameters.Add("@date", SqlDbType.DateTime);
                inset.Parameters.Add("@res", SqlDbType.Int);
                inset.Parameters["@name"].Value = _hrac.MenoHraca;
                inset.Parameters["@date"].Value = DateTime.Today;
                inset.Parameters["@res"].Value = int.Parse(cas);
                inset.ExecuteNonQuery();

            }
        }

但是这种方法给了我错误:

关键字“表”附近的语法不正确

我做错了什么?

【问题讨论】:

  • insert into [Table](顺便说一句,这个主意很糟糕)
  • 不要使用Table 作为表的名称。既然你这样做了,就像你在查询中所做的那样,请使用[Table]

标签: c# sql sql-server sql-insert


【解决方案1】:

Table 是 T-SQL 中的 reserved keyword

您应该将它与方括号一起使用,例如[Table]

如果保留字已被使用,您可以通过以下方式避免错误消息 用括号括住每个出现的单词 ([ ])。 但是, 最好的解决方案是将名称更改为非保留字

您也可以将using statement 用于SqlCommand,并且可以在一行中定义和添加参数值,例如;

using (var con = new SqlConnection(cns)) 
{
    using(var inset = new SqlCommand("Insert into [Table] values(@name,@date,@res)", con))
    {
         inset.Parameters.Add("@name", SqlDbType.VarChar).Value = hrac.MenoHraca;
         inset.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Today;
         inset.Parameters.Add("@res", SqlDbType.Int).Value = int.Parse(cas);
         con.Open();
         inset.ExecuteNonQuery();
    }
 }

始终建议您在 SqlCommand 中指定列名,例如;

"Insert into [Table](NameColumn, DateColumn, ResColumn) values(@name,@date,@res)"

【讨论】:

【解决方案2】:

我相信Table 是 SQL 中的保留字 :)
尝试为您的表使用其他名称或改用 [Table]

【讨论】:

    【解决方案3】:

    请尝试使用不同的表名称来解决此问题。

    例如:
    using(var inset = new SqlCommand("Insert into Student values(@name,@date,@res)", con))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2016-09-01
      相关资源
      最近更新 更多