在不知道类型或使用混合类型数组的情况下分配SqlParameter.Value
本文关键字:类型 情况下 分配 SqlParameter Value 数组 混合 不知道 | 更新日期: 2023-09-27 18:27:06
我正在处理一个数据层,它使用三个不同的存储过程三次调用数据库。我最初创建了三个不同的函数来检索三维的结果。第一个返回单个值,第二个返回整行,第三个返回表。它们还采用不同的参数。第一个取两个varchars,第二个取两int,最后三个取varchars。如果我试图获得幻想并将其全部合并,如下所示,我会有问题吗?
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()
吗?如果是这样的话,那它们本质上会变成同一件事吗?正如我所说,现在我有三个函数可以接收所有正确键入的参数,但如果可能的话,我正在努力消除重复的代码。
您不能有一个不同数据类型的数组,您可以有一个对象数组,并在将值保存到类型化变量时将单个元素强制转换为特定的数据类型。
不确定你想在哪里使用ToString()
,但如果它在你将字符串保存到Object数组中时没有意义,但如果你将对象保存到字符串变量中,那么是的,你需要这样做:
string str = objectArray[0].ToString();
不过,我会避免这一切,按照DJ KRAZE的说法,通过Parameter.AddWithValue
添加您的参数。
我对第一个问题需要做什么感到相当困惑。我意识到,在添加参数时,我不需要担心C#类型,因为GetSpParameterSet
会将我需要的所有信息拉入SqlParameter数组,并在每次调用时重置数组
foreach (string strParam in astrParams)
{
asqlParams[nParams].Value = strParam;
nParams++;
}
只会满足我的需要。将C#string
类型分配给SQL int
类型不会有任何问题,这是我主要关心的问题,因为这些语言无论如何都没有相同的类型。我知道我不必担心像"x"这样的东西进入int
类型,因为我使用的所有值都已经从其他SQL查询中正确类型的列中提取了。所以我不需要任何对象数组。