[英]Using DBNull.Value with SqlParameter without knowing sqlDbType?
[英]Assigning SqlParameter.Value without knowing type or using mixed type array
我有一个正在处理的数据层,它使用三个不同的存储过程对数据库进行了三次调用。 我最初创建了三个不同的函数来检索结果的三个维度。 第一个返回单个值,第二个返回整个行,第三个返回表。 它们还采用不同的参数。 第一个使用两个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()
吗? 如果是这样,这是否实质上将它们变成了同一件事? 就像我说的那样,现在我有三个函数可以接受正确键入的所有参数,但是我正在尝试摆脱重复的代码(如果可能)。
您不能具有不同数据类型的数组,但是可以具有对象数组,但是在将值保存到类型变量时将单个元素转换为特定数据类型。
不确定要在何处使用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查询中正确键入的列中提取出来了。 因此,我不需要任何对象数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.