我如何得到一个数据与返回参数与c#

本文关键字:数据 一个 返回 参数 何得 | 更新日期: 2023-09-27 18:15:27

我有这个常用的方法,我主要用于从数据库插入和获取数据。但是现在我遇到了一个问题,当有一个输出值时,我需要创建一个新方法,该方法接受并输出输出变量在我的db查询中返回的值。我听说你可以这样使用它。

cmd.Parameters.Add("@new_id", SqlDbType.Int).Direction = ParameterDirection.Output;

但是如何将这段代码修改为通用方法呢?

这是我常用的方法代码。

public DataTable GetDataWithParam(string spName, Dictionary<string, string> parms)
        {
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = spName;
                foreach (var para in parms)
                {
                    cmd.Parameters.AddWithValue(para.Key, para.Value);
                }
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    OpenConnection();
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    CloseConnection();
                    return ds.Tables[0];

                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                return null;
            }
        }  

我如何修改上面的代码来获得输出变量?非常感谢你的帮助。同样,在db查询中,返回值是int。

我如何得到一个数据与返回参数与c#

几个星期过去了,我问了这个问题,我想我应该回答这个问题,因为我得到了同事的帮助,找到了最好的解决方案。您可能想要创建一个新的通用泛型方法,就像问题中的方法一样,但要通过ParameterDirection输出结果。这就是我的答案。

public int ExecuteNonQueryWithOutputParamInt(string spName, Dictionary<string, string> parms, Dictionary<string, object> oParam = null)
        {
            string key = null;
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = spName;
                foreach (var para in parms)
                {
                    cmd.Parameters.AddWithValue(para.Key, para.Value);
                }

                if (oParam != null)
                {
                    foreach (var p in oParam)
                    {
                        cmd.Parameters.AddWithValue(p.Key, p.Value).Direction = ParameterDirection.Output;
                        key = p.Key;
                    }
                }
                    this.OpenConnection();
                    cmd.ExecuteNonQuery();
                    int returnValue = Convert.ToInt32(cmd.Parameters[key].Value);
                    this.CloseConnection();
                    return returnValue;

            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                return 0;
            }
        }

希望这篇文章能帮助别人。谢谢你的帮助。