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
相关产品推荐
相关产品推荐

