GetColumnNumber中第1行的绑定出错
本文关键字:绑定 出错 1行 中第 GetColumnNumber | 更新日期: 2023-09-27 18:23:35
我在调试控制台应用程序时遇到此OfficeWriter错误。我使用方法从master数据库中检索编码中使用的数据库的配置详细信息,结果出现了这个错误。
第1行GetColumnNumber中绑定错误
附件是我工作的部分编码。有人能解释一下错误是什么吗?
SqlDataReader rdSource = getSource();
SqlDataReader rdDestination = getDestination();
SqlDataReader rdCode = getCode();
while (rdSource.Read() && rdDestination.Read())
{
string src = rdSource["Value"].ToString();
string dest = rdDest["Value"].ToString();
ExcelTemplate XLT = new ExcelTemplate();
XLT.Open(src);
DataBindingProperties dataProps = XLT.CreateBindingProperties();
XLT.BindData(rdCode, "Code", dataProps);
XLT.Process();
XLT.Save(dest);
}
//rdCode method
SqlDataReader rdConnection = getConnection(); //method for getting connection from master
while (rdConnection.Read())
{
string con = rdConnection["Value"].ToString();
SqlConnection sqlCon = new SqlConnection(con);
string SQL = "SELECT * FROM Sales.Currency";
sqlCon.Open();
SqlCommand cmd = new SqlCommand(SQL, sqlCon);
cmd.ExecuteReader();
sqlCon.Close();
}
return rdConnection;
//getConnection method
string strCon = ConfigurationManager.ConnectionStrings["Master"].ConnectionString;
SqlConnection sqlCon = new SqlConnection(strCon);
string cSQL = "SELECT Value FROM dbo.COMMON_CONFIG WHERE Value = 'Data Source=localhost;Initial Catalog=Test;Integrated Security=True'";
SqlCommand cmd = new SqlCommand(cSQL, sqlCon);
sqlCon.Open();
return new SqlCommand(cSQL, sqlCon).ExecuteReader(CommandBehavior.ConnectionString);
//getSource & getDestination methods
string strCon = ConfigurationManager.ConnectionStrings["Master"].ConnectionString;
SqlConnection sqlCon = new SqlConnection(strCon);
string srcPath = @"FILE PATH NAME"; //change to destPath for getDestination
string sSQL = "SELECT Value FROM dbo.COMMON_CONFIG WHERE Value = '" + srcPath + "'";
SqlCommand cmd = new SqlCommand(cSQL, sqlCon);
sqlCon.Open();
return new SqlCommand(cSQL, sqlCon).ExecuteReader(CommandBehavior.ConnectionString);
错误是ExcelWriter在无法将数据绑定到模板时抛出的一般消息。
我认为这可能是由您的getCode()方法引起的。在getCode()中,使用SQLDataReader检索数据库的连接字符串:
SqlDataReader rdConnection = getConnection(); //method for getting connection from master
然后,您对该数据库执行SQL查询,但实际上并没有获得执行SQL查询以返回数据的SqlDataReader的句柄。
SqlCommand cmd = new SqlCommand(SQL, sqlCon);
cmd.ExecuteReader(); //Note: This returns the SqlDataReader that contains the data
然后返回rdConnection,它是连接字符串的SQLDataReader,而不是要导入的数据。rdConnection包含1行,并且您已经调用了Read(),因此没有可读取的记录。
SqlDataReader rdCode = getCode();
...
XLT.BindData(rdCode, "Code", dataProps);
您正在绑定的SQL读取器是已使用的"连接字符串",而不是您的销售数据。我建议如下:
- 返回cmd生成的新SqlDataReader。在getCode()中执行Reader(),而不是rdConnection
- 不要关闭与此新SqlDataReader的连接。ExcelWriter需要能够读取数据读取器才能绑定数据。如果关闭连接,ExcelWriter将无法正确绑定数据