【问题标题】:Additional information: Incorrect syntax near '?'附加信息:“?”附近的语法不正确
【发布时间】:2015-12-19 21:37:12
【问题描述】:

我的代码抛出了主题中提到的这个错误。我不知道起源,因为使用 ODBC 连接到 mysql 它可以工作,但是使用 SQL 连接到 SQL Server Express 是行不通的。如何解决?

SqlCommand Command = new SqlCommand("insert into lojas (NIF, Loja, bloqueado, DataFim, lastupdate, Nome) values (?, ?, ?, ?, ?, ?)", connection);
Command.CommandType = CommandType.Text;
Command.Parameters.AddWithValue("@NIF", grid_lic.CurrentRow.Cells[1].Value);
Command.Parameters.AddWithValue("@Loja", grid_lic.CurrentRow.Cells[2].Value);        
Command.Parameters.AddWithValue("@Bloqueado", grid_lic.CurrentRow.Cells[3].Value);
Command.Parameters.AddWithValue("@DataFim", grid_lic.CurrentRow.Cells[4].Value);
Command.Parameters.AddWithValue("@lastupdate", grid_lic.CurrentRow.Cells[5].Value);
Command.Parameters.AddWithValue("@Nome", grid_lic.CurrentRow.Cells[6].Value);

connection.Open();
Command.ExecuteNonQuery();

【问题讨论】:

    标签: sql sql-server odbc sqlcommand


    【解决方案1】:

    ? 在 SQL Server 的 t-sql 语法中不是有效的参数占位符。您需要更新您的查询以具有命名参数:

    insert into lojas (NIF, Loja, bloqueado, DataFim, lastupdate, Nome) 
    values (@NIF, @Loja, @Bloqueado, @DataFim, @lastupdate, @Nome)
    

    当您添加参数值时,AddWithValue 调用中使用的参数名称将用于将值放在查询中的正确位置。

    【讨论】:

    • 我认为这是问题所在,但现在当我插入数据时又出现了另一个问题:“无法将值 NULL 插入 'Id' 列,表 'Licenciamento.dbo.lojas';列没有允许空值。INSERT 失败。”但是id在sql server中设置为自动递增。不是应该自动填入datagrid吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2013-12-16
    • 1970-01-01
    • 2018-08-14
    • 2011-03-11
    • 2014-02-16
    • 2017-01-11
    相关资源
    最近更新 更多