尝试在 Codesmith Generator (csg) 中生成输出文件。
我正在使用 ADOXSchemaProvider 访问 sql 数据库。我在一个简单的表上遇到这个错误(1 varchar(50) 字段)
该消息的语法似乎表明问题的根源在于 CSG 试图访问列表/集合中的属性。其他一些 SO 问题(与 CSG 无关)建议使用保留字可能是问题所在,所以我使用的是一堆字母。不是问题。
我已卸载/重新安装。
对象表脚本是这个
CREATE TABLE [dbo].[tblWitsEnd](
--[Id] [int] IDENTITY(1,1) NOT NULL,
asdf varchar(255) null
) ON [PRIMARY]
GO
错误调用堆栈是这个
Error: Item cannot be found in the collection corresponding to the requested name or ordinal.
Stack Trace:
at ADOX.Properties.get_Item(Object Item)
at SchemaExplorer.ADOXSchemaProvider.GetTableColumns(String connectionString, TableSchema table)
at SchemaExplorer.TableSchema.#o4c()
at SchemaExplorer.TableSchema.get_Columns()
at _CodeSmith.StartingBlocks30_cst.__RenderMethod1(TextWriter writer, Control control) in G:\csgtemplate.cst:line 113
at CodeSmith.Engine.DelegateControl.Render(TextWriter writer)
at CodeSmith.Engine.Control.RenderChildren(TextWriter writer)
at CodeSmith.Engine.CodeTemplate.Render(TextWriter writer)
at CodeSmith.Engine.CodeTemplate.RenderToString()
at CodeSmith.Engine.Remoting.TemplateSession.#9Hb()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
我模板的第 113 行是此代码段的第一行
<% for i = 0 to SourceTable.Columns.Count - 1 step 1 %>
<%= GetSetFieldSnippet(SourceTable.Columns(i) ) %>
<% next %>
此外,我确实调查了 ADOX 提供程序是否可能使用 1 作为列索引的基础。
如果我执行其中任何一项,问题仍然存在。
<%= SourceTable.Columns.Clear %>
<%= SourceTable.Columns.Item(0) %>