必须声明标量变量错误 ADO.NET

Posted

技术标签:

【中文标题】必须声明标量变量错误 ADO.NET【英文标题】:Must declare scalar variable error ADO.NET 【发布时间】:2015-08-07 00:15:35 【问题描述】:

所以,我有我的更新,它在一个字符串上给了我这个错误。我已经尝试使用不带参数的连接方式,我尝试更改参数顺序并验证为空,但仍然返回错误。

对于那些询问的人。标题中的错误“必须声明标量变量“@Apellido”。”

这是完整的代码:

using (OleDbConnection connection = new OleDbConnection(connectionString))

    OleDbCommand command = new OleDbCommand();
    OleDbTransaction transaction = null;

    // Set the Connection to the new OleDbConnection.
    command.Connection = connection;

    // Open the connection and execute the transaction. 
    try
    
        connection.Open();
        command.CommandText = "UPDATE Asociados SET Apellido=@Apellido, Nombre=@Nombre, FechaNacimiento=@FechaNacimiento, Comentarios=@Comentarios, DNI=@DNI, ParcelaID=@ParcelaID, FechaIngreso=@FechaIngreso, Nacionalidad=@Nacionalidad, EstadoCivil=@EstadoCivil, Profesion=@Profesion, DomicilioComercial=@DomicilioComercial, TelefonoComercial=@TelefonoComercial, Celular=@Celular, Email=@Email, Patente1=@Patente1, Patente2=@Patente2, Patente3=@Patente3, Domicilio=@Domicilio, Telefono=@Telefono, Localidad=@Localidad, CodigoPostal=@CodigoPostal, Referente=@Referente, Saldo=@Saldo, FechaBaja=@FechaBaja WHERE ID=@ID";
        command.Parameters.AddWithValue("@ID", ((object)AsociadoModificado.ID) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Apellido", AsociadoModificado.Apellido.ToString());
        command.Parameters.AddWithValue("@Nombre",AsociadoModificado.Nombre.ToString());
        command.Parameters.AddWithValue("@FechaNacimiento",Convert.ToDateTime(AsociadoModificado.FechaNacimiento).Date);
        command.Parameters.AddWithValue("@Comentarios", AsociadoModificado.Comentarios.ToString());
        command.Parameters.AddWithValue("@DNI", ((object)AsociadoModificado.DNI) ?? DBNull.Value);
        command.Parameters.AddWithValue("@ParcelaID", ((object)AsociadoModificado.ParcelaID) ?? DBNull.Value);
        command.Parameters.AddWithValue("@FechaIngreso", ((object)Convert.ToDateTime(AsociadoModificado.FechaIngreso).Date) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Nacionalidad", ((object)AsociadoModificado.Nacionalidad) ?? DBNull.Value);
        command.Parameters.AddWithValue("@EstadoCivil", ((object)AsociadoModificado.EstadoCivil) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Profesion", ((object)AsociadoModificado.Profesion) ?? DBNull.Value);
        command.Parameters.AddWithValue("@DomicilioComercial", ((object)AsociadoModificado.DomicilioComercial) ?? DBNull.Value);
        command.Parameters.AddWithValue("@TelefonoComercial", ((object)AsociadoModificado.TelefonoComercial) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Celular", ((object)AsociadoModificado.Celular) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Email", ((object)AsociadoModificado.Email) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Patente1", ((object)AsociadoModificado.Patente1) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Patente2", ((object)AsociadoModificado.Patente2) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Patente3", ((object)AsociadoModificado.Patente3) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Domicilio", ((object)AsociadoModificado.Domicilio) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Telefono", ((object)AsociadoModificado.Telefono) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Localidad", ((object)AsociadoModificado.Localidad) ?? DBNull.Value);
        command.Parameters.AddWithValue("@CodigoPostal", ((object)AsociadoModificado.CodigoPostal) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Referente", ((object)AsociadoModificado.Referente) ?? DBNull.Value);
        command.Parameters.AddWithValue("@Saldo", ((object)AsociadoModificado.Saldo) ?? DBNull.Value);
        command.Parameters.AddWithValue("@FechaBaja", ((object)AsociadoModificado.FechaBaja) ?? DBNull.Value);
        command.ExecuteNonQuery();
        connection.Close();
    
    catch(Exception e)
    
    

【问题讨论】:

提供错误文本将是一个好的开始。牙齿.拉(1)。 @SamAxe 您可以猜到错误消息的标题。 "必须声明标量变量 %/Apellido/% :) 缩小范围,简化为一个参数查询,再次测试。 我希望您复制/粘贴该错误文本,因为您显然无法弄清楚您输入的内容。再看看你的标题。无论如何,此错误的最常见原因是 SQL 或 Parameters.AddWithValue 调用中的拼写错误(因此复制/粘贴在这里很重要)。 另外,这与什么 DBMS 通信? 【参考方案1】:

您使用OleDbCommand 就像它是SqlCommand。在SqlCommand 中使用命名参数(例如:@Apellido)。对于OleDbCommand,您必须使用位置占位符。

看看这个:

http://www.codeproject.com/Tips/231217/Parameters-SqlCommand-vs-OledbCommand-and-OdbcComm http://www.java2s.com/Code/CSharp/Database-ADO.net/PassparametertoOleDbCommand.htm

另外,它一直是asked here several times。 :)

【讨论】:

这就是为什么错误必须出现在帖子中以便索引器可以找到它的原因。现在它工作得非常奇怪,因为 select 使用命名参数。谢谢安德烈。【参考方案2】:

见*** 订单计数,您的 ID 在您的 CommandText 中最后一个,在您的参数分配中第一个。

【讨论】:

是的,只是为了测试而改变了它。应该没关系,因为我仍然声明“@varname”,无论我无法使其工作的顺序,我都尝试过查询顺序,数据库顺序,并且没有特定的顺序。没有任何效果。

以上是关于必须声明标量变量错误 ADO.NET的主要内容,如果未能解决你的问题,请参考以下文章

必须声明标量变量错误 ADO.NET

sql数据库错误“必须声明标量变量”

查询“必须声明标量变量”

sql必须声明标量变量错误

不明白错误信息:必须声明标量变量“@Username”。

不正确的语法必须声明标量变量