如何将成员添加到 SqlParameter 数组?

How can I add members to an array of SqlParameter?

我有这个代码:

private SqlParameter[] GetSPParams()
{
    SqlParameter[] spParams = null;
    int loopNum = 1;
    while (ParamExists(loopNum))
    {
        //spParams.
        new SqlParameter()
        {
            ParameterName = GetParamName(loopNum),
            SqlDbType = GetSqlDbType(loopNum),
            Value = GetParamValue(loopNum)
        };
        loopNum++;
    }
    return spParams;
}

...如您所见,returns 始终为 null。

"spParams." 被注释掉了,因为我在 Intellisense 可能性中没有发现 "Add" 或类似的东西 - 或者任何看起来正确的东西。

我需要一个 SqlParameter 数组,因为它最终会传递给我运行存储过程的方法:

private void RunStoredProc()
{
    SqlParameter[] spparams = GetSPParams();
    DataTable dtSPResults = SPRunnerSQL.ExecuteSQLReturnDataTable(comboBoxCPSStoredProcs.Text,
        CommandType.StoredProcedure,
        spparams
    );
    rowsReturned = dtSPResults.Rows.Count;
    labelRowsReturned.Text = String.Format("Rows returned: {0}", rowsReturned);
    if (rowsReturned > 0)
    {
        dataGridView.DataSource = dtSPResults;
    }
}

. . .

public static DataTable ExecuteSQLReturnDataTable(string sql, CommandType cmdType, params SqlParameter[] parameters)

那么如何将 SqlParameter 值添加到 SqlParameter 数组?

您可以使用 List<SqlParameter> 而不是 array,那么您应该能够添加新元素。然后,只需 return 一个调用方法 ToArray() 的数组即可将集合转换为 array.

private SqlParameter[] GetSPParams()
{
    var spParams = new List<SqlParameter>();
    int loopNum = 1;
    while (ParamExists(loopNum))
    {
        spParams.Add(new SqlParameter()
        {
            ParameterName = GetParamName(loopNum),
            SqlDbType = GetSqlDbType(loopNum),
            Value = GetParamValue(loopNum)
        });
    }
    return spParams.ToArray();
}

现在,如果您需要添加 nem 成员,您可以从 SqlParameter 派生,但是作为 documentation,这个 class 是 sealed