如何从存储过程调用和获取数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从存储过程调用和获取数据?相关的知识,希望对你有一定的参考价值。
请告诉我如何从商店程序中调用和获取数据?
private void GetPatient(string sPatient)
{
string connString = "Server = XXX.X.X.XXX; Database = XXX; UID = XXXX; Password = XXXX";
mysqlConnection conn = new MySqlConnection(connString);
MySqlCommand cmd;
MySqlDataAdapter da;
DataTable dt = new DataTable();
cmd = new MySqlCommand("getPerson_Search", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@sPatient", sPatient);
cmd.Parameters.Add("@tFullName", MySqlDbType.VarChar, 64);
cmd.Parameters["@tFullName"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@tHN", MySqlDbType.VarChar, 9);
cmd.Parameters["@tHN"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@tCid", MySqlDbType.VarChar, 13);
cmd.Parameters["@tCid"].Direction = ParameterDirection.Output;
da = new MySqlDataAdapter(cmd);
try
{
conn.Open();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.DataBinding();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ข้อผิดพลาด");
}
finally
{
conn.Close();
}
return "OK.";
}
答案
从广义上讲,你是在正确的路线上。有一些构建错误会阻止您,例如尝试从需要修复的string
方法返回void
,但这与问题无关。你有大多数ADO.NET的东西OK-ish。有一些“尼特”,如在一次性物体周围使用using
(conn
,cmd
等)。
请注意,@tFullName
似乎没有被您的SQL填充,所以我怀疑该参数将按预期工作。看起来你正在考虑列,就像它们是参数一样,在这种情况下:你根本就不需要那些参数。列通过数据读取器返回(在这种情况下)数据适配器正在使用。坦率地说,我主张在大多数情况下不使用DataTable
(主要的例外是像临时报告查询这样的模式无法合理地知道) - 而是转移到List<SomeType>
模型(或类似)。像“小巧玲珑”这样的工具会对此有所帮助,使您的代码类似于:
using(var conn = new MySqlConnection(connString))
{
var people = conn.Query<Person>("getPerson_Search", new { sPatient },
commandType: CommandType.StoredProcedure).AsList();
peopleGrid.DataSource = people;
}
(其中class Person
具有与来自查询的列匹配的属性)
以上是关于如何从存储过程调用和获取数据?的主要内容,如果未能解决你的问题,请参考以下文章