请告诉我如何从商店程序中拨打电话并获取数据?
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.";
}
答案 0 :(得分:1)
从广义上讲,你是在正确的路线上。有一些构建错误会阻止您,例如尝试从需要修复的string
方法返回void
,但这与问题无关。你有大多数ADO.NET的东西OK-ish。有一些“尼特”,比如在一次性物品周围使用using
(conn
,cmd
等)。
请注意,@tFullName
似乎没有填充SQL,因此我怀疑该参数是否会按预期运行。看起来您正在考虑将列视为 out parameters ,在这种情况下:您根本不需要这些参数。列通过数据读取器返回(在这种情况下)数据适配器正在使用。坦率地说,我会在大多数情况下使用DataTable
提倡反对(主要的例外是像临时报告查询那样无法合理地知道模式) - 而是转移到{{1模型(或类似)。像“小巧玲珑”这样的工具会对此有所帮助,使您的代码类似于:
List<SomeType>
(其中using(var conn = new MySqlConnection(connString))
{
var people = conn.Query<Person>("getPerson_Search", new { sPatient },
commandType: CommandType.StoredProcedure).AsList();
peopleGrid.DataSource = people;
}
具有与来自查询的列匹配的属性)