Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调用和获取数据表单存储过程?_C#_Stored Procedures - Fatal编程技术网

C# 如何调用和获取数据表单存储过程?

C# 如何调用和获取数据表单存储过程?,c#,stored-procedures,C#,Stored Procedures,请告诉我如何打电话从存储过程中获取数据 private void GetPatient(string sPatient) { string connString = "Server = XXX.X.X.XXX; Database = XXX; UID = XXXX; Password = XXXX"; MySqlConnection conn = new MySqlConnection(connString); MySqlCommand c

请告诉我如何打电话从存储过程中获取数据

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


大体上,你的思路是正确的。有一些生成错误正在阻止您,例如尝试从需要修复的
void
方法返回
string
,但这与问题无关。您拥有ADO.NET的大部分功能。有一些“NIT”,例如在一次性物品周围使用
命令(
conn
cmd
,等等)

请注意,
@tFullName
似乎不是由SQL填充的,因此我怀疑该参数是否会像您预期的那样工作。看起来您将列看作是out参数,在这种情况下:您根本不需要这些参数。列通过数据适配器正在使用的数据读取器返回。坦率地说,我反对在大多数场景中使用
DataTable
(主要的例外是模式无法合理知道的即席报告查询),而改为使用
列表
模型(或类似)。有像“dapper”这样的工具可以帮助您实现这一点,使您的代码类似于:

using(var conn = new MySqlConnection(connString))
{
    var people = conn.Query<Person>("getPerson_Search", new { sPatient },
        commandType: CommandType.StoredProcedure).AsList();
    peopleGrid.DataSource = people;
}
使用(var conn=new MySqlConnection(connString))
{
var people=conn.Query(“getPerson\u Search”,new{sPatient},
commandType:commandType.StoredProcess).AsList();
peopleGrid.DataSource=人;
}

(其中
classperson
的属性与查询中的列相匹配)

我怀疑您的程序是否正在编译。您正在从
void
函数返回一个字符串。“存在生成错误”-那么:首先修复这些错误?在编译之前什么都不会起作用;第二个似乎与此相关,但其余的都无关