我根据指令here修改了代码。
open FSharp.Data.Sql
let [<Literal>] connection_str = "Server=localhost;Port=3306;SSL Mode=None;Uid=<UID>;Pwd=<PWD>;Database=<DB>"
type provider = SqlDataProvider<Common.DatabaseProviderTypes.MYSQL, connection_str>
let context = provider.GetDataContext()
context.Procedures.SpGetFrontContracts.Invoke(1)
Intellisense一直运行到SpGetFrontContracts之后的时间。在那之后,什么都没有。尝试编译,我得到:
Error FS0039 The field, constructor or member 'Invoke' is not defined.
否则,只要坚持使用表和视图,我就可以连接数据库并插入和查询数据。
SpGetFrontContracts是我数据库中的一个有效存储过程(其实际名称为sp_get_front_contracts,但类型提供程序似乎删除了下划线)。我可以使用HeidiSQL成功运行它。如果有用,这是创建代码:
CREATE DEFINER=`<UID>`@`localhost` PROCEDURE `sp_get_front_contracts`(
IN `Group` INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT p.DateTime, p.Contract, p.Volume, c.Name
FROM tbl_contract_price_data p
INNER JOIN tbl_contracts c on p.Contract = c.ID
WHERE c.`Group` = `Group`
ORDER BY p.DateTime
LIMIT 1000;
END
我尝试创建一个更简单的名为“ test”的存储过程,不带任何参数,只运行一条select语句。它显示在“过程”下的类型提供程序中,但是我再也无法调用Invoke
。
我最好的猜测是Invoke
是从我没有的某些命名空间或程序集引用中继承的,所以我目前正在研究SqlProvider source来尝试找出它可能是什么。我当前正在引用:
谢谢您的任何建议。
编辑:动作似乎发生在SqlDesignTime.fs中的一个名为generateSprocMethod的函数中,该函数从346行开始。我将尝试弄清楚那里发生了什么。
编辑:三天后,我放弃了这个想法,我放弃了,只用了MySQL Connector/NET。
答案 0 :(得分:0)
我不确定您的基础数据或结构,但是我知道这是另外两种(正确的)解决方法:
WHERE c.`Group` = `Group` -- what you have.
-- possible corrections:
WHERE c.`Group` = p.`Group` -- did you mean this?
WHERE c.`Group` = "Group" -- or this?