如何从存储过程调用和获取数据?

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.";
    }

enter image description here

enter image description here

答案

从广义上讲,你是在正确的路线上。有一些构建错误会阻止您,例如尝试从需要修复的string方法返回void,但这与问题无关。你有大多数ADO.NET的东西OK-ish。有一些“尼特”,如在一次性物体周围使用usingconncmd等)。

请注意,@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具有与来自查询的列匹配的属性)

以上是关于如何从存储过程调用和获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何调用SQLServer2012的存储过程并获取返回结果集及出参?

从存储过程中获取返回值

如何从内部调用获取记录集到存储过程?

重定向时如何在 Safari 中保留 uri 片段?

如何从 PHP 代码调用复杂的 Oracle 过程

如何从 Java 调用 MSSQL 加密的存储过程?