.net 从DB中检索一行并填充数据表时出现System.StackOverflowException

qzwqbdag  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(151)

我试图从数据库中获取1行并将其填充到datatable,但在将数据填充到datatable时出现错误。昨天还好好的,突然就出了这种事。
用于返回订单上最后一行的函数,以便在添加更多订单行时使用该最后一行订单。此函数调用一次,在代码宽度内无循环调用.用户点击按钮生成一组条码,条码调用生成函数,生成函数调用生成函数(从数据库中检索行)。
这里是代码错误的部分(从数据库中检索行):

public String  getLastBarcodeByFirstChar(char c)
    {
        DataTable dataTable = new DataTable();
        using (SqlConnection Con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand($"SELECT TOP 1 barcode FROM Barcodes WHERE barcode LIKE '{c}%' ORDER BY Id DESC", Con))
            {
                SqlDataAdapter ad = new SqlDataAdapter(cmd);
                //ad.ReturnProviderSpecificTypes = true;
                ad.Fill(dataTable);
            }
        }
        
        foreach(DataRow r in dataTable.Rows)
        {
            return r["barcode"].ToString();
        }

        return string.Empty;
    }

字符串
函数调用此条码上的生成条码函数

public string GenerateRandomEan13Barcode(char x)
{
    ...
    String lastBarcode = func.getLastBarcodeByFirstChar(x);
    ...
}


叫那里

public string getBarcode(char c)
    {
        EncryptFuc encryptFuc = new EncryptFuc();
        string barcode = encryptFuc.GenerateRandomEan13Barcode(c);

        if (IsContainBarcode(barcode))
        {
            getBarcode(c);
        }

        return barcode;


当用户点击按钮时调用,直接调用,没有循环。

protected void BtnGenerateBarcodesRange_Click(object sender, EventArgs e)
        {
            ...

            //generate the barcode 
            string Barcode = assetDo.getBarcode(x[0]);
            ...
        }


你能告诉我我错过了什么吗

sr4lhrrt

sr4lhrrt1#

我发现这个问题由汉斯Ke ing评论
getBarcode函数循环递归无穷大,,因为IsContainBarcode(条形码)函数上的错误。

相关问题