【问题标题】:Invalid Parameter Name参数名称无效
【发布时间】:2010-11-16 04:30:28
【问题描述】:

由于生成的参数名称不正确,我在保存数据时遇到问题。

该表有一个字段“E-mail”,当类包装器生成时,InsertCmd 使用“@E-mail”作为参数之一。在 SQL Server 中,这是非法的并产生了异常。

我已经在 SubSonic 上寻找了一种将参数名称修改为简单的“@Email”但 ParameterName 属性是只读的方法。

我使用的是 SubSonic 2.2,但没有对其进行内部修改的源代码。

有什么想法吗?

TIA

【问题讨论】:

  • 重命名不是一个选项。我正在编写一个将用户数据从 MS Access 迁移到 SQL 的应用程序。他们有超过 500 个 MS Access 数据库。我将不得不重命名每个数据库中的列。哎哟。

标签: subsonic


【解决方案1】:

如果无法更改列名,您可以修改模板。有关如何操作的详细信息,请参阅此博客文章:

http://johnnycoder.com/blog/2008/06/09/custom-templates-with-subsonic/

【讨论】:

    【解决方案2】:

    我有个小伙伴用SVN拉取源代码,果然在SS源中发现了一个bug。

    当在类包装器中设置列名时,ColumnName 属性的设置器会正确使用为您设置 ParamaterName 属性 “参数名称 = Utility.PrefixParameter(Utility.StripNonAlphaNumeric(columnName), Table.Provider);”。这将删除任何非法字符,例如我的电子邮件列中的连字符。

    但是... 创建 SQL 命令时不使用属性 ParameterName。这是 SQLDataProvider.GetInsertSQL 中的代码,第 1462 行。

    pars.Append(Utility.PrefixParameter(colName, this));

    我把它改成了

    pars.Append(col.ParameterName);

    现在问题已经解决了。

    感谢您提出可能的解决方案。

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多