日期:2014-05-18  浏览次数:20790 次

如何通过TableAdapter来调用自己写的存储过程,并且给存储过程传递参数?
比如自己在MYSQL中写了一个这样的存储过程:
SQL code

DELIMITER $$

DROP PROCEDURE IF EXISTS `perf`.`CreateFactory` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `CreateFactory`(type INTEGER)
BEGIN
   CASE type
   WHEN 0 THEN
   --some operations
   WHEN 1 THEN
   --some operations
   --other WHEN
   ELSE
   --some operations
   END CASE;
END $$

DELIMITER ;



现在我想在C#工程中,通过TableAdapter来调用该存储过程,并在调用的时候希望能传入参数来为type赋值。
我按照MSDN的文档http://msdn.microsoft.com/zh-cn/library/ms171921(v=vs.90).aspx中的做法:
右击所需的 TableAdapter,然后使用快捷菜单添加查询。

1“TableAdapter 查询配置向导”将打开。

2选择“使用现有存储过程”,然后单击“下一步”。

3从下拉列表中选择一个存储过程,然后单击“下一步”。

4选中“没有值”返回的选项,然后单击“下一步”。

5为该查询提供名称。

6单击“下一步”或“完成”完成该向导;该查询即被添加到 TableAdapter。

虽然生成了一个成员函数CreateFactory,但是却是无法传参的CreateFactory()的形式。请问有什么方法可以生成类似CreateFactory(int type)类型的方法来调用存储过程?还是只能通过最原始的编辑sqlcommand的方式?

ps:后来通过给这个TableAdapter添加UPDATE类型的Query,在这个query中直接写这样的SQL语句“CALL CreateFactory(1)”实现了从函数调用传入参数的存储过程,但这个函数种只能对应一个调用,复用性太差。~~

------解决方案--------------------
你可以右键点TableAdapter方框里的CreateFactory,在快结菜单中选择“属性”,然后在属性编辑窗口中双击Paramter项,就会弹出一个编辑参数的对话框,然后选择增加参数,对应选择mysql类型和c#类型,就可以了,