由于参数名称生成错误,我在保存数据方面遇到了问题。
该表有一个字段“E-mail”,当生成类包装器时,InsertCmd使用“@E-mail”作为参数之一。在SQL Server中,这是非法的并且会产生异常。
我已经搜遍了SubSonic以便将参数名称修改为“@Email”,但ParameterName属性是只读的。
我正在使用SubSonic 2.2并且没有进行内部修改的来源。
有什么想法吗?
TIA
答案 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/