C# OleDBCommand.ExecuteReader()错误访问2007

C# OleDBCommand.ExecuteReader()错误访问2007,c#,oledbcommand,oledbdatareader,C#,Oledbcommand,Oledbdatareader,我有以下代码: private void GenerarTicket(int prmFOLIO) { try { string Ticket = "Nombre de la tienda: UAMCAV\n" + "RFC:XXXXXX\n" + "------------------------------\n" +

我有以下代码:

private void GenerarTicket(int prmFOLIO)
        {
            try
            {
                string Ticket = "Nombre de la tienda: UAMCAV\n" +
                    "RFC:XXXXXX\n" +
                    "------------------------------\n" +
                    "ARTICULO   CANT   PRECIO   TOTAL\n" +
                    "------------------------------\n";
                string varSQL = "SELECT Detalle_Ventas.folio, Detalle_Ventas.id_articulo, Detalle_Ventas.cantidad, Detalle_Ventas.p_unitario, Detalle_Ventas.iva*Detalle_Ventas.p_unitario AS iva, Detalle_Ventas.cantidad*Detalle_Ventas.p_unitario AS total, articulos.desc_producto, Ventas.user_login, LEFT(Ventas.fecha,10) AS fecha " + " FROM Ventas INNER JOIN (articulos INNER JOIN Detalle_Ventas ON articulos.id_articulo=Detalle_Ventas.id_articulo) ON Ventas.folio=Detalle_Ventas.folio WHERE Ventas.folio=" + prmFOLIO + "";

                string DetalleTicket = "";
                double varGranTotal = 0;
                OleDbConnection cnnTicket =new OleDbConnection(Clases.clsMain.CnnStr);
                cnnTicket.Open();
                OleDbCommand cmdTicket =new OleDbCommand(varSQL, cnnTicket);
                OleDbDataReader drTicket;
                **drTicket = cmdTicket.ExecuteReader();**
                while (drTicket.Read())
                {
                    DetalleTicket +=
                        drTicket["desc_producto"].ToString() + "   " +
                        drTicket["cantidad"].ToString() + "   " +
                        String.Format("{0:C}",
                        drTicket["p_unitario"]) + "   " +
                        String.Format("{0:C}",
                        drTicket["total"]) + "\n";
                    varGranTotal += (double)drTicket["total"];
                }
                DetalleTicket +=
                    "------------------------------\n" +
                    "TOTAL: " + String.Format("{0:C}",
                    varGranTotal);
                Ticket += DetalleTicket;
                mPrintDocument _mPrintDocument = new mPrintDocument(Ticket);
                _mPrintDocument.PrintPreview();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

我多次修改了粗体部分,因为我总是会抛出一个奇怪的异常,比如别名desc_producto中的循环引用,我使用自己创建的.dll生成购物单,但无法修复此异常!你能帮助我吗?顺便说一下,这是数据库中项目的名称。

异常原因=>别名导致的循环引用

计算字段的别名或标签不能与用于计算字段的任何字段名相同

将查询更改为下面

string varSQL =
                "**SELECT LEFT(desc_producto,10) as desc_product_o,**" +
                " cantidad,p_unitario,total" +
                " FROM Ventas WHERE Folio=" + prmFOLIO + "";
这会奏效的

以下是Microsoft支持以了解更多详细信息

更新

还需要在while循环中更改代码

 while (drTicket.Read())
 {
     DetalleTicket +=
     drTicket["desc_product_o"].ToString() + "   " +
     drTicket["cantidad"].ToString() + "   " +
     String.Format("{0:C}",
     drTicket["p_unitario"]) + "   " +
     String.Format("{0:C}",
     drTicket["total"]) + "\n";
     varGranTotal += (double)drTicket["total"];
 }

别名desc_producto中的循环引用通常意味着您只需要选择一个与字段名不同的字段别名。如果您将as desc_producto更改为as desc_producto2,并将DRTICKE[desc_producto]更改为DRTICKE[desc_producto2],这是否解决了您的问题?未工作,它表示某些已确定的参数没有特定值!好啊我成功了,但是,这段代码假设要打印一张票据,但是这些项目都没有显示在预览中!你有主意吗?我要修改代码!是的!仍然不起作用,它说指令无效,没有它说某些已建立的参数并没有特定的值,在表Ventas中,我并没有项目desc_producto,因为我不需要它,它在表articulos中。对不起,如果我的英语不好!