C# SSIS脚本任务报错:Must declare the scalar variable "@IdVal"
问题:OleDb执行INSERT语句时提示“Must declare the scalar variable "@IdVal"”
执行以下C#代码时,持续收到错误提示{"Must declare the scalar variable "@IdVal"."}:
cnnDbLocal = new OleDbConnection(localDbStringConnection); cnnDbLocal.Open(); string select = "INSERT INTO Estimate (EstimateID) VALUES (@IdVal);"; using (OleDbCommand command = new OleDbCommand(select, cnnDbLocal)) { command.Parameters.AddWithValue("@IdVal", 1); rowsAffected = command.ExecuteNonQuery(); }
对应的数据库表建表语句:
CREATE TABLE [dbo].[Estimate]( [EstimateID] [int] NULL, [Name] [varchar](50) NULL, [Description] [varchar](200) NULL, [Weight] [float] NULL, [FacilityID] [smallint] NULL, [JDEFacility] [smallint] NULL, [FabricationHours] [float] NULL, [CreatedOn] [datetime] NULL ) ON [PRIMARY] GO
解决方法
问题核心是OleDb不支持命名参数机制,它只按参数的添加顺序匹配SQL中的占位符,不认参数名。你需要把SQL里的@IdVal换成通用占位符?,再按顺序添加参数即可。
修改后的代码:
cnnDbLocal = new OleDbConnection(localDbStringConnection); cnnDbLocal.Open(); // 用?作为参数占位符 string insertSql = "INSERT INTO Estimate (EstimateID) VALUES (?);"; using (OleDbCommand command = new OleDbCommand(insertSql, cnnDbLocal)) { // 按SQL中?的顺序添加参数,无需指定原命名 command.Parameters.AddWithValue("?", 1); rowsAffected = command.ExecuteNonQuery(); }
补充说明
- 如果涉及多个参数,SQL中的
?数量必须和参数数量一致,且添加参数的顺序要和SQL里?的顺序完全对应。比如插入两个字段的场景:
代码里要先添加EstimateID对应的参数,再添加Name对应的参数,顺序不能颠倒。INSERT INTO Estimate (EstimateID, Name) VALUES (?, ?);
内容的提问来源于stack exchange,提问作者iaredi
相关产品推荐
相关产品推荐

