SqlCommand参数Add与AddWithValue

Yak*_*kov 27 c# parameters sqlcommand

我应该什么时候使用Parameters. Add/AddWithValue?在下面的MSDN示例中,他们使用Parameters.Addfor intParameters.AddWithValueforstring

command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

command.Parameters.AddWithValue("@demographics", demoXml);
Run Code Online (Sandbox Code Playgroud)

什么是最好用的 datetime

Tim*_*ter 39

使用,Add如果你想通过更多的工作使所有显而易见.AddWithValue如果你很懒,请使用.AddWithValue将导出其值的参数类型,因此请确保它是正确的类型.你应该例如解析stringint,如果这是正确的类型.

有一个原因需要避免Add,如果您的参数类型是int必须小心使用参数名称和对象重载,那么使用SqlDbType-enum 选择另一个重载.

备注(方法重载甚至obsolete现在):

使用此SqlParameterCollection.Add方法的重载指定整数参数值时请小心 .因为此重载采用Object类型的值,所以当值为零时,必须将整数值转换为Object类型...如果不执行此转换,编译器会假定您正在尝试调用 SqlParameterCollection.Add(string, SqlDbType)重载.

  • 请注意,[`cmd.Parameters.Add(String,SqlDbType)`不被弃用](https://msdn.microsoft.com/en-us/library/wbys3e9s(v = vs.110).aspx).只推荐[`cmd.Parameters.Add(String,Object)`(现已过时)](https://msdn.microsoft.com/en-us/library/9dd8zze1%28v=vs.110%29.aspx? F = 255&MSPPError = -2147217396). (6认同)
  • @RahulNikate:`AddWithValue`也不是最好的方法,因为它从参数值中推断出参数的类型.这通常会导致糟糕的执行计划或错误的转换.它也不首先验证参数(fe类型,如果`Datetime`但你传递`String`).只有`Add(String parameterName,Object value)`不推荐使用`Add`的所有其他重载.我更喜欢带参数名和`SqlDbType`的那个(考虑指定字符串类型的大小). (5认同)
  • 我不同意 Add 比 AddWithValue 更好——它们都可能犯错误——所以使用哪个更简单。添加可用于提前设置您的参数,以便您只需要指定对象。另外,这个`Parameters.Add("@BEGDATE", SqlDbType.DateTime).Value = myDate`。几乎和 AddWithValue 一样短。 (3认同)
  • `AddWithValue` 只是避免了我的答案中提到的问题,并且具有与 `Add(string, object)` 相同的功能。 (2认同)