参数名称无效

时间:2009-08-02 15:42:34

标签: subsonic

由于参数名称生成错误,我在保存数据方面遇到了问题。

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

我已经搜遍了SubSonic以便将参数名称修改为“@Email”,但ParameterName属性是只读的。

我正在使用SubSonic 2.2并且没有进行内部修改的来源。

有什么想法吗?

TIA

2 个答案:

答案 0 :(得分:2)

我有一个使用SVN来提取源代码的伙伴,正如预期的那样,在SS源中发现了一个错误。

在类包装器中设置列名时,ColumnName属性的setter会为您正确设置ParamaterName属性 “parameterName = Utility.PrefixParameter(Utility.StripNonAlphaNumeric(columnName),Table.Provider);”。这将删除我的电子邮件列中的连字符等非法字符。

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

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

我将此更改为

pars.Append(col.ParameterName);

现在问题已经解决了。

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

答案 1 :(得分:1)

如果无法更改列名,则可以修改模板。有关如何:

的详细信息,请参阅此博客文章

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