我有一类库,程序如下://说明;string[,] fvalue 为二维数组,格式定如下:fvalue[i,1]="";  //参数名称
fvalue[i,2]="";  //参数类型
fvalue[i,3]="";  //参数类型长度
fvalue[i,4]="";  //参数值SqlParameter MakeItem(string[,] fvalue)
{
.....            SqlParameter[] prams = {
  this.MakeInParam("@fid",SqlDbType.Int,4,fid)
   };

//问题所在点,如何将上面的数组fvalue 转换为此处{
  this.MakeInParam("@fid",SqlDbType.Int,4,fid),this.MakeInParam("@fid",SqlDbType.Int,4,fid),......
   ....
} /// <summary>
/// 创建存储过程使用的参数.
/// </summary>
/// <param name="ParamName">参数名称.</param>
/// <param name="DbType">参数类型.</param>
/// <param name="Size">参数大小.</param>
/// <param name="Direction">参数方向(Direction).</param>
/// <param name="Value">参数对应对应值.</param>
/// <returns>返回创建的新参数.</returns>
protected SqlParameter MakeParam(string ParamName, SqlDbType DbType, int Size, ParameterDirection Direction, object Value) 
{
SqlParameter param; if(Size > 0)
{
param = new SqlParameter(ParamName, DbType, Size);
}
else
{
param = new SqlParameter(ParamName, DbType);
} param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
{
param.Value = Value;
} return param;
}

解决方案 »

  1.   

    注意:this.MakeInParam 应改成下面的类名称:MakeParam 
      

  2.   

    //说明;string[,] fvalue 为二维数组,格式定如下: fvalue[i,1]="";  //参数名称 
    fvalue[i,2]="";  //参数类型 
    fvalue[i,3]="";  //参数类型长度 
    fvalue[i,4]="";  //参数值 SqlParameter[] sParams=new SqlParameter[fvalue.length];
    for(int i = 0; i < fvalue.length; i++)
    {
    sParams[i] = new SqlParameter(...);
    }
      

  3.   

    以前的办法是拼一个用特殊符号拼接的字符串  到SQL里面后再拆分
      

  4.   

            // 简单说一下,
            // 不应该定义成2维 字符串数组,
            //应该是一个参数对应为一个类或结构体        //具有四个属性 分别为 参数名称 string ,参数类型 int , ,参数值 object 
            //传递多个参数时 将各个类或结构体 放在范型集合中,传递那个范型集合
            //参数名称 string ,参数类型长度 int ,参数值 object  这三个没什么说的,直接赋值就OK了        //参数类型 int 需要转换一下 SqlDbType s= (SqlDbType)0;这个形式就可以
      

  5.   


            //        // 摘要:
            ////     System.Int64。64 位的有符号整数。
            //BigInt = 0,
            ////
            //// 摘要:
            ////     System.Byte 类型的 System.Array。二进制数据的固定长度流,范围在 1 到 8,000 个字节之间。
            //Binary = 1,
            ////
            //// 摘要:
            ////     System.Boolean。无符号数值,可以是 0、1 或null。
            //Bit = 2,
            ////
            //// 摘要:
            ////     System.String。非 Unicode 字符的固定长度流,范围在 1 到 8,000 个字符之间。
            //Char = 3,
            ////
            //// 摘要:
            ////     System.DateTime。日期和时间数据,值范围从 1753 年 1 月 1 日到 9999 年 12 月 31 日,精度为 3.33 毫秒。
            //DateTime = 4,
            ////
            //// 摘要:
            ////     System.Decimal。固定精度和小数位数数值,在 -10 38 -1 和 10 38 -1 之间。
            //Decimal = 5,
            ////
            //// 摘要:
            ////     System.Double。-1.79E +308 到 1.79E +308 范围内的浮点数。
            //Float = 6,
            ////
            //// 摘要:
            ////     System.Byte 类型的 System.Array。二进制数据的可变长度流,范围在 0 到 2 31 -1(即 2,147,483,647)字节之间。
            //Image = 7,
            ////
            //// 摘要:
            ////     System.Int32。32 位的有符号整数。
            //Int = 8,
            ////
            //// 摘要:
            ////     System.Decimal。货币值,范围在 -2 63(即 -922,337,203,685,477.5808)到 2 63 -1(即 +922,337,203,685,477.5807)之间,精度为千分之十个货币单位。
            //Money = 9,
            ////
            //// 摘要:
            ////     System.String。Unicode 字符的固定长度流,范围在 1 到 4,000 个字符之间。
            //NChar = 10,
            ////
            //// 摘要:
            ////     System.String。Unicode 数据的可变长度流,最大长度为 2 30 - 1(即 1,073,741,823)个字符。
            //NText = 11,
            ////
            //// 摘要:
            ////     System.String。Unicode 字符的可变长度流,范围在 1 到 4,000 个字符之间。如果字符串大于 4,000 个字符,隐式转换会失败。在使用比
            ////     4,000 个字符更长的字符串时,请显式设置对象。
            //NVarChar = 12,
            ////
            //// 摘要:
            ////     System.Single。-3.40E +38 到 3.40E +38 范围内的浮点数。
            //Real = 13,
            ////
            //// 摘要:
            ////     System.Guid。全局唯一标识符(或 GUID)。
            //UniqueIdentifier = 14,
            ////
            //// 摘要:
            ////     System.DateTime。日期和时间数据,值范围从 1900 年 1 月 1 日到 2079 年 6 月 6 日,精度为 1 分钟。
            //SmallDateTime = 15,
            ////
            //// 摘要:
            ////     System.Int16。16 位的有符号整数。
            //SmallInt = 16,
            ////
            //// 摘要:
            ////     System.Decimal。货币值,范围在 -214,748.3648 到 +214,748.3647 之间,精度为千分之十个货币单位。
            //SmallMoney = 17,
            ////
            //// 摘要:
            ////     System.String。非 Unicode 数据的可变长度流,最大长度为 2 31 -1(即 2,147,483,647)个字符。
            //Text = 18,
            ////
            //// 摘要:
            ////     System.Byte 类型的 System.Array。自动生成的二进制数,并保证其在数据库中唯一。timestamp 通常用作对表中各行的版本进行标记的机制。存储大小为
            ////     8 字节。
            //Timestamp = 19,
            ////
            //// 摘要:
            ////     System.Byte。8 位的无符号整数。
            //TinyInt = 20,
            ////
            //// 摘要:
            ////     System.Byte 类型的 System.Array。二进制数据的可变长度流,范围在 1 到 8,000 个字节之间。如果字节数组大于 8,000
            ////     个字节,隐式转换会失败。在使用比 8,000 个字节大的字节数组时,请显式设置对象。
            //VarBinary = 21,
            ////
            //// 摘要:
            ////     System.String。非 Unicode 字符的可变长度流,范围在 1 到 8,000 个字符之间。
            //VarChar = 22,
            ////
            //// 摘要:
            ////     System.Object。特殊数据类型,可以包含数值、字符串、二进制或日期数据,以及 SQL Server 值 Empty 和 Null,后两个值在未声明其他类型的情况下采用。
            //Variant = 23,
            ////
            //// 摘要:
            ////     XML 值。使用 System.Data.SqlClient.SqlDataReader.GetValue(System.Int32) 方法或 System.Data.SqlTypes.SqlXml.Value
            ////     属性获取字符串形式的 XML,或通过调用 System.Data.SqlTypes.SqlXml.CreateReader() 方法获取 System.Xml.XmlReader
            ////     形式的 XML。
            //Xml = 25,
            ////
            //// 摘要:
            ////     SQL Server 2005 用户定义的类型 (UDT)。
            //Udt = 29,int 所对应的SqlDbType 的值