C# 错误:参数化查询';插入高度(数据标识,高度)值(@ID,@Height)和#x27;需要一个未提供的参数值

C# 错误:参数化查询';插入高度(数据标识,高度)值(@ID,@Height)和#x27;需要一个未提供的参数值,c#,sql,sql-server-ce,C#,Sql,Sql Server Ce,我使用的是SQL Server CE数据库和C语言。我有一个带有bigint类型列的表。当我使用foreach循环插入一些数据时: foreach (int alt in lsAltitudes) { Query = "INSERT INTO Altitude (DataID, Height) " + "VALUES (@ID, @Height) "; using (var SQLCmd = new SqlCeCommand(Quer

我使用的是SQL Server CE数据库和C语言。我有一个带有bigint类型列的表。当我使用foreach循环插入一些数据时:

 foreach (int alt in lsAltitudes)
 {
     Query =   "INSERT INTO Altitude (DataID, Height) " +
                "VALUES (@ID, @Height) ";

     using (var SQLCmd = new SqlCeCommand(Query))
     {
         SQLCmd.Parameters.Add("@ID", DataID);
         SQLCmd.Parameters.Add("@Height", alt);
         con.CeExecuteNonQuery(SQLCmd);
     }
 }
获取错误: 参数化查询“插入高度(数据标识,高度)值(@ID,@Height)”需要一个未提供的参数值


顺便说一下,我的DataID变量的类型是long。我认为这是关于转换bigint和long值的问题。但是我不确定。

您可以使用Add方法的重载并显式指定数据类型

command.Parameters.Add("@ID", SqlDbType.BigInt);
command.Parameters["@ID"].Value = DataID

如果我没弄错的话,应该是这样的

using (var SQLCmd = new SqlCeCommand(Query)) 
{ 
     SQLCmd.Parameters.Add("@ID", SqlDbType.BigInt).Value = DataID; 
     SQLCmd.Parameters.Add("@Height", SqlDbType.Int).Value = alt; 
     con.CeExecuteNonQuery(SQLCmd); 
} 

您确定
DataID
不是
null
?(显然,
alt
不能是,因为它显然是
int
)实际上DataID是一个外键。我猜问题就出在这方面。不是null,而是键表中不存在的某个值。谢谢你的提示。不,那将是另一个错误。外键冲突的SqlException.or内联:
command.Parameters.Add(“@ID”,SqlDbType.BigInt)。Value=DataID