Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#Visual Studio中工作时mysql存储过程出现问题_C#_Mysql_Stored Procedures - Fatal编程技术网

在C#Visual Studio中工作时mysql存储过程出现问题

在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

我是MySQL的新手,现在我有一个必须使用MySQL的项目。这是一个win应用程序,我在VisualStudio2010上使用C#。我尝试编写一个简单的存储过程,如下所示:

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;