【问题标题】:Replace OracleCommand by SqlCommand [C#/ASP.NET]用 SqlCommand 替换 OracleCommand [C#/ASP.NET]
【发布时间】:2017-04-26 11:54:14
【问题描述】:

在数据库迁移的上下文中,我必须在我的代码中将 OracleCommand 替换为 SqlCommand。在我的代码中,我使用了 myOracleCommand.BindByName = true;。 BindByName 属性在 SqlCommand 类中不存在,所以我想知道 SqlCommand 在参数方面是否为“默认绑定名称”,因此我可以删除这一行。

【问题讨论】:

  • 参数在 Sql Server 中由名称绑定。您必须更改查询中的所有参数名称,还可能更改 SqlParameter 实例。
  • 是的,我同意更改查询和SqlParameter 实例的必要性。但是当涉及到我在帖子中提到的那行代码时,您同意我可以删除它吗?
  • 请检查查询中的名称:Oracle 使用 : 作为参数,而 MS SQL 需要 @,例如select * from MyTable where id = @prm_id -> select * from MyTable where id = :prm_id
  • @Neo - 正确,您可以删除该行。我还添加了一个更详细的答案,在 Sql Server 中无法按位置绑定,这就是 SqlCommand 没有这样一个属性的原因。

标签: c# asp.net sql-server oracle


【解决方案1】:

您可以忽略/不转移该行 (BindByName = true)

参数只能在SqlCommand 中按名称绑定,而不能按位置绑定(当您在OracleCommand 中设置BindByName = true 时会发生这种情况)。


您必须更改查询中的所有参数名称,还可能更改 SqlParameter 实例。

在 Oracle 中是 :paramName,在 sql server 中是 @paramNameSqlParameter实例中的参数名称可以以@开头,也可以不以@开头,否则在执行时由命令添加。

【讨论】:

  • 我只想补充一点,可以使用System.Data,OdbcSystem.Data,OleDb 将参数按位置与SQL Server 后端绑定。只有 System.Data,SqlClient 按名称绑定,这是从托管代码访问 SQL Server 的首选 API。
  • @DanGuzman - 好点,我更新了我的答案以指定 SqlCommand 而不是 Sql Server。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2020-01-31
  • 1970-01-01
  • 2018-05-26
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多