我是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有什么问题?提前致谢
答案 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;
但是现在我想知道为什么这种方式有效而旧方法不适用?