【发布时间】:2018-06-27 14:30:25
【问题描述】:
我想创建一个应用程序,该应用程序将使用我的数据库中的数据创建一个 .CSV 文件,但我收到此错误:
System.IndexOutOfRangeException:'CT_Num'
当我删除时:
command.CommandText = "SELECT [Actionnaire Pal] FROM f_comptet";
和
dataReader["[Actionnaire Pal]"].ToString()
我不再收到任何错误。
class Program
{
static void Main(string[] args)
{
SqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
SqlCommand command = conn.CreateCommand();
command.CommandText = "SELECT CT_Num, [Actionnaire Pal] FROM F_COMPTET WHERE CG_NumPrinc = '4110000'";
SqlDataReader dataReader = command.ExecuteReader();
StreamWriter sw = new StreamWriter("C:\\facture.csv");
while (dataReader.Read())
{
sw.WriteLine("FAAV" + ";" + "." + ";" + "02" + ";" + "JJ/MM/AAAA" + ";" + "A" + ";" + "11" + ";" + dataReader["CT_Num"].ToString() + dataReader["[Actionnaire Pal]"].ToString() + ";");
}
sw.Close();
}
}
【问题讨论】:
-
您只执行第二个 CommandText 语句。您覆盖了第一个,因此 CT_Num 不存在。因此,当您删除第二个时,将执行第一个。也许您想加入这两个表?
-
哦,我看到这是同一张表,只需修复您的查询以包含两列
SELECT CT_Num, [Actionnaire Pal] FROM f_comptet WHERE CG_NumPrinc = '4110000' -
另外,当使用
SqlDataReader的索引运算符时,您不需要转义空格。例如。做dataReader["Actionnaire Pal"].ToString() -
感谢您的回答,我不知道连接两个表是否有问题,但即使是同一个表中的数据,我也有同样的错误
-
另外,题外话,但你为什么要连接静态字符串而不是
"FAAV;.;02;JJ/MM/AAAA..."?
标签: c# sql sql-server ado.net