使用C#Visual Studio时mysql存储过程的问题

时间:2011-09-17 04:29:59

标签: c# mysql stored-procedures

我是MySQL新手,现在我有一个必须与MYSQL一起工作的项目。这是一个win应用程序,我在Visual Studio 2010上使用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有什么问题?提前致谢

2 个答案:

答案 0 :(得分:0)

在MySQL中调用程序的语法是

CALL GetBank()

所以

MySqlCommand cm = new MySqlCommand("CALL GetBank()", con);

应该这样做。这也消除了指定命令 cm 是存储过程的需要。

答案 1 :(得分:0)

这个问题解决了!而不是使用普通的方式与MySQL交互:打开连接,创建命令并使用数据适配器来填充数据表,我使用MySQLHelper类,它适用于我:

DataTable dt = MySqlHelper.ExecuteDataset("SERVER=localhost;DATABASE=dowacodb;UID=root;PASSWORD=123456", "call getbank()").Tables[0];
dataGridView1.DataSource = dt;

但是现在我想知道为什么这种方式有效而旧方法不适用?