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

ASP.NET Core Web API通过ODBC调用存储过程报错,存储过程应在哪定义?

问题解答

核心结论

存储过程sp_insert_booking不属于ASP.NET Core项目的代码结构,它是InterBase数据库层面的对象,不需要在项目目录中定义,需要在你ODBC连接指向的InterBase数据库中创建。

你遇到的报错正是因为InterBase在当前连接的数据库中找不到对应名称的存储过程,所以把存储过程名识别为了未知的SQL Token。


操作步骤

  • 打开InterBase数据库管理工具(如IBExpert、isql命令行工具),连接到你项目ODBC连接字符串指向的目标数据库
  • 执行存储过程创建SQL,InterBase的存储过程创建语法示例如下:
-- 先切换语句终止符避免和存储过程内的分号冲突
SET TERM ^ ;
CREATE PROCEDURE sp_insert_booking (
    @project VARCHAR(255)
    -- 按需补充其他入参
)
AS
BEGIN
    -- 此处编写实际的业务逻辑,例如插入booking表的SQL语句
    INSERT INTO booking (project_field) VALUES (@project);
END^
-- 恢复默认语句终止符
SET TERM ; ^
  • 确认存储过程创建成功后,再运行你的ASP.NET Core代码即可。

额外注意事项

  • 存储过程名称的拼写要和C#代码中调用的名称完全一致,InterBase如果开启了大小写敏感配置,需要严格匹配大小写
  • 确认你的ODBC连接字符串指向的数据库实例,和你创建存储过程的是同一个实例,避免连错环境
  • 如果调整后仍然报错,可以尝试修改C#调用写法,避开CommandType.StoredProcedure的兼容问题:
OdbcConnection connection = new OdbcConnection(ConnectionString());
// 直接用SQL语法调用存储过程,用?做参数占位符
OdbcCommand ODBCCommand = new OdbcCommand("EXECUTE PROCEDURE sp_insert_booking ?", connection);
ODBCCommand.CommandType = CommandType.Text;
// 参数按顺序添加,不需要写参数名
ODBCCommand.Parameters.AddWithValue("", "");

connection.Open();
ODBCCommand.ExecuteNonQuery();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:02