如何从.net c#读取输出变量?

如何从.net c#读取输出变量?,c#,.net,C#,.net,有人知道如何从.net c#读取输出变量吗 例如: 如果我有以下存储过程,它将返回输出变量(@customer\u id、@customer\u name、@customer\u address、@customer\u age),而不是select变量,我如何使用以下内容读取输出变量 mySqlCommand.CommandText = "EXEC app_customers @name=" + sName.Text; mySqlConnection.Open(); SqlDataReader

有人知道如何从.net c#读取输出变量吗

例如:

如果我有以下存储过程,它将返回输出变量(
@customer\u id、@customer\u name、@customer\u address、@customer\u age
),而不是select变量,我如何使用以下内容读取输出变量

mySqlCommand.CommandText = "EXEC app_customers @name=" + sName.Text;
mySqlConnection.Open();
SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
while (mySqlDataReader.Read())
{
}

如果结果是单个值(或者如果您只对第一列中的第一个值感兴趣),请使用方法
ExecuteScalar

它返回一个对象,只需将其转换为预期的类型

int id = (int)mySqlCommand.ExecuteScalar();
注意:调用过程的方式不是正常的方式。将命令设置为引用存储过程,然后向
命令.parameters
集合添加适当的参数。使用
“exec…”
调用过程不是最佳做法,甚至可能会使您容易受到攻击。如果您需要有关执行此类呼叫的更多信息

编辑:

如果它确实是您需要捕获的输出参数(我相信我误解了您的问题),那么上面的段落更适用。考虑这种方法:

mySqlCommand.CommandText = "app_customers";
mySqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
mySqlCommand.Parameters.AddWithValue("@name", theValue);
var customerIdParam = mySqlCommand.Parameters.Add("@customer_id", System.Data.SqlDbType.Int);
customerIdParam.Direction = System.Data.ParameterDirection.Output;
// add more parameters, setting direction as appropriate

mySqlCommand.ExecuteNonQuery();
int customerId = (int)customerIdParam.Value;
// read additional outputs

只需搜索c#存储过程输出参数,前两个链接是和,参数也将帮助您抵御SQL注入攻击。@Anthony Pegram:如果输出变量不止一个呢?@Jin,您可以尝试添加更多参数(应该可以处理多个输出参数,但我没有尝试过). 但是,如果您真的返回了许多这样的值,您可以考虑选择这些值并将它们作为表返回。