Dan*_*anP 6 sql-server ado.net
考虑以下代码:
Dim sql = "SELECT * FROM MyTable WHERE value1 = @Param1"
If someCondition Then
sql = sql + " AND value2 = @Param2"
End If
Dim cmd As New SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@Param1", param1Value)
cmd.Parameters.AddWithValue("@Param2", param2Value)
Run Code Online (Sandbox Code Playgroud)
假设我动态构建了一个复杂的 sql 语句,该语句可能包含也可能不包含@Param2参数 - 将其作为参数添加到命令中是否有任何危害?
我的实际用例显然比这复杂得多,但总的来说,这是我应该避免的模式吗?如果是这样,为什么?
我要注意的唯一一点是,如果您调用.AddWithValue,则由 SQL Server 来确定参数的数据类型。
SQL Server 在猜测方面做得非常好 - 但有时,它的猜测“次优”,并且提供详细信息会对您有所帮助。
所以我个人倾向于总是使用这段代码:
SqlParameter aParam = new SqlParameter("@Param1", SqlDbType.VarChar, 50);
aParam.Value = param1Value;
Run Code Online (Sandbox Code Playgroud)
这样做有两个主要好处:
您可以轻松地将其包装在静态帮助器类中,甚至将其用作扩展方法。
这需要更多的工作,但您可以获得更多的控制权,并且如果您让 SQL Server 来猜测您的类型,则可能会避免不必要的、耗时的数据类型转换和其他意外的副作用。
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |