我一直在开发一个使用强类型数据集和存储过程的应用程序。我刚刚毕业,这就是出售给我们的方法。我开始怀疑了。
我的客户告诉我他可能会从SQL Server更改为MySQL。根据我的阅读,不使用存储过程可能会更好,因为迁移可能会变得更加困难。所以我无论如何都使用向导实现了一个新的表适配器查询并选择了使用SQL语句而不是创建新的存储过程。
我对查询的调用
Intranet.administratorsDataTable dt = taAdministrators.GetAdministrators();
现在生成此错误:
executereader需要一个开放且可用的连接。该 连接的当前状态已关闭
我不知道为什么这个自动生成的代码没有连接,而且我没有任何形状来处理这个问题。我决定暂时回到SP,所以我可以完成一些工作。仍然抛出此错误(相同的表适配器,相同的方法名称,但重新配置为使用SP)。我所有其他数据库调用都可以正常工作。
我假设生成的SQL代码仍在某处浮动,即使我更改了适配器以使用SP。有人可以告诉我它在哪里,所以我可以删除它吗?
另一方面,我真的开始认为手动使用SqlConnection和SqlCommand是一个更好的选择,因为使用这些查询“工具”只是在灵活性方面遇到麻烦,例如修改数据库表等。您是否有更有经验的人能告诉我这是否正确或您是否提倡使用表适配器?
*的修改 它也抛出了这些:
无效的操作。连接已关闭。
和
已经有一个与此命令关联的打开DataReader,必须先关闭它。
答案 0 :(得分:1)
解决方案是转到tableAdapter中的查询属性,并手动将“命令类型”更改为 StoredProcedure 。
突出显示查询>转到属性窗口>更改命令类型
当我重新配置查询时,似乎没有(或没有)自动更新。
答案 1 :(得分:0)
如果你提供一些代码,那就更好了。 我想,你需要打开连接。
SqlCommand Cmd= new SqlCommand();
Cmd.Open();
// then u can use Cmd.ExecuteReader();