且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

请求调用存储过程 C# 的合法示例:MYSQL

更新时间:2023-02-17 11:09:45

你应该设置一个对参数的引用

You should set up a reference to the parameter

var param3 = new MySqlParameter();
param3.Direction = ParameterDirection.Output;
param3.DbType = // whatever the dbtype for int is or whatever you need.
param3.ParameterName = "param3";

com.Parameters.Add(param3);

在你的try块中,插入

in your try block, insert

var result = com.ExecuteReader(); // or com.ExecuteScalar();

执行该操作后,您的参数应填充该值,并且您还应该能够读取 SP 结果(选择).

after you execute that, your parameter should have the value populated and you should be able to also read the SP results (select).

var paramResult = param3.Value;

读取 SP 的结果可以作为 reader 或 scalar.

Reading the results of the SP can be done as reader or scalar.

// execute reader
while (result.Read()) {
    int value = result.GetInt32(0)); 
} /* read returned values in result */ 

// execute scalar
int value;
if (int.TryParse($"{result}", out value)) {
    /* do something with value */ 
}

/******************************************************/

/************************************************/

这个块应该带你去你需要去的地方

This block should get you where you need to go

        const string strcon = "whatevs";

        using (MySqlConnection con = new MySqlConnection(strcon))
        {
            const string sql = "login";

            MySqlCommand com = new MySqlCommand(sql, con);
            com.CommandType = CommandType.StoredProcedure;

            var stuffParam = new MySqlParameter("stuff", stuffValue);
            var passParam = new MySqlParameter("pass", passValue);
            var param3Param = new MySqlParameter();
            param3Param.ParameterName = "param3";
            param3Param.DbType = DbType.Int32;
            param3Param.Direction = ParameterDirection.Output;

            com.Parameters.Add(stuffParam);
            com.Parameters.Add(passParam);
            com.Parameters.Add(param3Param);

            try
            {
                var scalarResult = com.ExecuteScalar();

                // because you used select @param3 in your sp.
                int value;
                if (int.TryParse($"{scalarResult}", out value))
                {
                    //do something with value
                }

                //// because you used select @param3 in your sp.
                //var readerResult = com.ExecuteReader();

                //if (readerResult.Read())
                //{
                //    // 
                //    value = readerResult.GetInt32(0);
                //}

                int param3Returned;
                if(int.TryParse($"{param3Param.Value}", out param3Returned))
                {
                    // do something with param3Returned
                }
            }
            catch (Exception ex)
            {
                // do something with ex
            }
        }