[已解决] 调试时遇到此错误,错误如下:
尝试解释或访问此数据源第0行中GetColumnNumber(Name)的数据字段时出错
无法为数据标记访问此字段名称或索引< %% = Production.ProductID>
解决方案:数据标记从%% = Production.ProductID替换为%% = $ Production
的 [增订] 的 @AlisonB再次对错误提供了很大的帮助。现在可以调试它,但它显示另一个错误:
所有数据源必须是唯一的。名称“生产”和工作表“已用于数据源。
如何在读者或IdSQL旁边使用名称放入XLT.BindCellData()?因为如果我使用阅读器,我会有这个错误。 IdSQL也是如此。但是如果我删除了while语句,它可以调试,但excel文件将在所有单元格中显示为System.Data.SqlClient.SqlDataReader而不是实际数据。
static void Main(string[] args)
{
ExcelTemplate XLT = new ExcelTemplate();
XLT.Open(@"C:\Users\administrator.EBSDLAB\Desktop\Examples\Test_DB\test.xlsx");
DataBindingProperties dataProps = XLT.CreateDataBindingProperties();
var strCon = ConfigurationManager.ConnectionStrings["Production"].ConnectionString;
SqlConnection sqlCon = new SqlConnection(strCon);
string IdSQL = "SELECT Name, Size, Color FROM Production.Product";
sqlCon.Open();
SqlCommand cmd = new SqlCommand(IdSQL, sqlCon);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
XLT.BindCellData(IdSQL, "Production", dataProps);
}
XLT.BindCellData(reader, "Production", dataProps);
XLT.Process();
XLT.Save(@"C:\Users\administrator.EBSDLAB\Desktop\Examples\Test_DB\products.xlsx");
}
答案 0 :(得分:2)
模板文件中的语法与您在代码中进行的数据绑定调用不兼容。
BindCellData旨在将单个变量值绑定到单元格。 BindCellData 的参数是 Object ,它是您要导入的单个值, String ,它是数据的名称标记和 DataBindingProperties 对象,用于自定义导入数据的方式。
此方法调用的相应数据标记语法是%% = $ DataMarkerName,其中“DataMarkerName”是传递给 BindCellData 的值。要与您发布的代码匹配,您的数据标记应为:
ProductID: %%=$Production
您还可以更改正在进行的方法调用,以匹配模板中数据标记的排列;在这种情况下,您需要的方法调用是BindRowData。
无论数据标记是在同一行还是模板文件中的其他配置,BindRowData 都会获取单行值并将其导入数据标记。您需要为数据源中的每一列数据建立一个数据标记,这是您已经完成的。
有关数据标记语法的详细信息,请参阅Creating Data Markers上的文档。如果您有兴趣,我们还有关于使用arrays as data sources in ExcelTemplate和importing database information的指南。