在C#Visual Studio中工作时mysql存储过程出现问题
我是MySQL的新手,现在我有一个必须使用MySQL的项目。这是一个win应用程序,我在VisualStudio2010上使用C#。我尝试编写一个简单的存储过程,如下所示:在C#Visual Studio中工作时mysql存储过程出现问题,c#,mysql,stored-procedures,C#,Mysql,Stored Procedures,我是MySQL的新手,现在我有一个必须使用MySQL的项目。这是一个win应用程序,我在VisualStudio2010上使用C#。我尝试编写一个简单的存储过程,如下所示: DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `GetBank`() BEGIN SELECT * FROM BANKNAME; END 我的C代码在这里: private void btnShow_Click(object sender, EventA
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetBank`()
BEGIN
SELECT * FROM BANKNAME;
END
我的C代码在这里:
private void btnShow_Click(object sender, EventArgs e)
{
MySqlConnection con = new MySqlConnection("SERVER=localhost;DATABASE=dowacodb;UID=root;PASSWORD=123456");
con.Open();
DataTable dt = new DataTable();
MySqlCommand cm = new MySqlCommand("GetBank", con);
cm.CommandType = CommandType.StoredProcedure;
MySqlDataAdapter da = new MySqlDataAdapter(cm);
da.Fill(dt);
con.Close();
dataGridView1.DataSource = dt;
}
我的测试是在单击按钮时在datagridview中显示数据。它在第一次单击时显示良好,但当我再次单击时,datagridview中的数据消失了。下一次单击将反复显示数据
但当不使用存储过程时,此代码将是完美的
private void btnShow_Click(object sender, EventArgs e)
{
MySqlConnection con = new MySqlConnection("SERVER=localhost;DATABASE=dowacodb;UID=root;PASSWORD=123456");
con.Open();
DataTable dt = new DataTable();
MySqlCommand cm = new MySqlCommand("Select * from bankname", con);
cm.CommandType = CommandType.Text;
MySqlDataAdapter da = new MySqlDataAdapter(cm);
da.Fill(dt);
con.Close();
dataGridView1.DataSource = dt;
}
那么MySQL有什么问题?提前感谢在MySQL中调用过程的语法是
CALL GetBank()
所以
我应该这样做。这也消除了将命令cm指定为存储过程的需要。此问题已解决!与使用普通方式与MySQL交互不同:打开连接、创建命令并使用数据适配器填充datatable,我使用了MySQLHelper类,它对我来说很好:
DataTable dt = MySqlHelper.ExecuteDataset("SERVER=localhost;DATABASE=dowacodb;UID=root;PASSWORD=123456", "call getbank()").Tables[0];
dataGridView1.DataSource = dt;
但现在我想知道为什么这种方式有效而旧的方式无效 谢谢你的关心!我也尝试过这个解决方案,但结果还是一样
DataTable dt = MySqlHelper.ExecuteDataset("SERVER=localhost;DATABASE=dowacodb;UID=root;PASSWORD=123456", "call getbank()").Tables[0];
dataGridView1.DataSource = dt;