0

我有一个正在处理的数据层,它使用三个不同的存储过程调用数据库三次。我最初创建了三个不同的函数来检索结果的三个维度。第一个返回单个值,第二个返回整行,第三个返回表。它们还接受不同的参数。第一个采用两个 varchar,第二个采用两个 int,最后三个采用 varchar。如果我尝试花哨并将其全部合并,如下所示,我会遇到问题吗?

public void CallStoredProcedure(string[] astrParams, string strConnectionString, string strStoredProcedure)
{
    int nParams = 0;
    SqlParameter[] asqlParams;
    asqlParams = SqlHelperParameterCache.GetSpParameterSet(strConnectionString, strStoredProcedure);
    foreach (string strParam in astrParams)
    {
        asqlParams[nParams].Value = strParam;
        nParams++;
    }
}

或者,我可以在不知道里面有什么的情况下使用混合数据类型的数组,我可以将不同的类型分配到同一个数组中,替换元素吗?

object[] aParams;
string strName = "Joe";
long lngHeight = 180;
object[0] = strName;
object[1] = lngHeight;
CallStoredProcedure(aParams, strConnectionString, "StoredProcedure1")

long lngWeight = 3;
string strItemName = "Bookend";
object[0] = lngWeight;
object[1] = strItemName;
CallStoredProcedure(aParams, strConnectionString, "StoredProcedure2")

然后将该函数内的代码更改为:

foreach (object oParam in astrParams)
{
    asqlParams[nParams].Value = oParam;
    nParams++;
}

我需要ToString()在这两种情况中的一种或两种情况下使用吗?如果是这样,这是否本质上将它们变成了同一件事?就像我说的那样,现在我有三个函数可以接收正确输入的所有参数,但如果可能的话,我正试图摆脱重复的代码。

4

2 回答 2

1

你不能有一个不同数据类型的数组,你可以有一个对象数组,但是在将值保存到类型化变量时,可以将各个元素转换为特定的数据类型。

不知道你想在哪里使用ToString(),但如果你将字符串保存到对象数组时没有意义,但如果你将对象保存到字符串变量,那么是的,你需要这样做:

string str = objectArray[0].ToString();

不过,我会避免这整个混乱,并按照 DJ KRAZE 所说的内容添加您的参数Parameter.AddWithValue

于 2014-10-17T19:48:34.617 回答
0

我对我最初的问题需要做什么感到相当困惑。我意识到在添加参数时我不需要担心 C# 类型,因为GetSpParameterSet将我需要的所有信息拉入 SqlParameter 数组,并在每次调用时重置数组。所以我的初始代码:

foreach (string strParam in astrParams)
{
    asqlParams[nParams].Value = strParam;
    nParams++;
}

...只会满足我的需要。string将 C#类型分配给 SQL类型不会有任何问题int,这是我主要关心的问题,因为这些语言无论如何都没有相同的类型。我知道我不必担心诸如“x”之类的东西会进入一个int类型,因为我正在使用的所有值都是从其他 SQL 查询中正确键入的列中提取的。所以我不需要任何对象数组。

于 2014-10-21T16:49:06.703 回答