C# 错误:参数化查询';插入高度(数据标识,高度)值(@ID,@Height)和#x27;需要一个未提供的参数值
我使用的是SQL Server CE数据库和C语言。我有一个带有bigint类型列的表。当我使用foreach循环插入一些数据时: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
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代码>