You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里?的顺序完全对应。比如插入两个字段的场景:
    INSERT INTO Estimate (EstimateID, Name) VALUES (?, ?);
    
    代码里要先添加EstimateID对应的参数,再添加Name对应的参数,顺序不能颠倒。

内容的提问来源于stack exchange,提问作者iaredi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:23:11