SqlCommand1.Parameters.Add方法,一共有6次重载的方法,我不太明白以下两种方法有什么区别?第一种:
SqlCommand1.Parameters.Add(参数名称,参数类型,参数长度,参数所在列的名字);
然后再SqlCommand1.Parameters["参数名称"].value=参数的值;第二种:
SqlCommand1.Parameters.Add(参数名称,参数值);以上两种SqlCommand均采用存储过程,请问平常大家用的是哪种?这两种有什么具体区别?是不是第一种比第二种"安全"?如果是的话,安全在哪一点呢?

解决方案 »

  1.   

    建议还是写出类型和sp中得类型吻合
    否则它根据你得value来生成参数类型长度会引起一定得问题
      

  2.   

    第二种用法实际上有可能会和另一个重载有歧义,就是这个:
    public SqlParameter(string, SqlDbType); 
    比较:
    public SqlParameter(string, object);这两个方法中的最后一个有可能是同一个值,这们的话系统就不知道用哪一个了,所以从这个角度来说用第一种更好一些,但是有时确定不会出现第二个参数相同的情况,用第二种更直接,但我喜欢用第一种方式来作:)
      

  3.   

    第二种用法实际上有可能会和另一个重载有歧义,就是这个:
    public SqlParameter(string, SqlDbType); 
    比较:
    public SqlParameter(string, object);这两个方法中的最后一个有可能是同一个值,这们的话系统就不知道用哪一个了,所以从这个角度来说用第一种更好一些,但是有时确定不会出现第二个参数相同的情况,用第二种更直接,但我喜欢用第一种方式来作:)
      

  4.   

    SqlCommand1.Parameters.Add(参数名称,参数类型,参数长度,参数所在列的名字);
    一般使用在SqlAdapter.Update的时候吧
    参数所在列的名字就是DataTable中对应的ColumnNameSqlCommand1.Parameters.Add(参数名称,参数值);
    这个没有什么不好的,对于存储过程而言
      

  5.   

    MSDN上的一段关于这两个构造函数的说明:
    -----------------------SqlParameter 构造函数 (String, Object)  [C#]
    ....备注
    当在 value 参数中指定 Object 时,SqlDbType 将从 Object 的 .NET Framework 类型推断出。请小心使用 SqlParameter 构造函数的这个重载来指定整数参数值。因为此重载接受 Object 类型的 value,所以当此值为零时,必须将整数值转换为 Object 类型,如下面的 C# 示例所示。Parameter = new SqlParameter("@pname", Convert.ToInt32(0));如果不执行该转换,则编译器将认为您尝试调用 SqlParameter (string, SqlDbType) 构造函数重载。
      

  6.   

    我使用的SqlCommand1.Parameters.Add(参数名称,参数类型,参数长度,参数所在列的名字);
    来学习学习听听前辈的意见
      

  7.   

    da.InsertCommand.Parameters.Add("@MenuName",SqlDbType.VarChar,50).Value = txtMenuName.Text.Trim();
    我感觉这一种最好用,一行就能解决,写成两行太麻烦了,有些写成三行的还要定义一个变量,更长。