【问题标题】:Use a database value in a for loop within a foreach在 foreach 内的 for 循环中使用数据库值
【发布时间】:2016-08-26 16:49:51
【问题描述】:

我有一个数据绑定复选框列表。我在嵌套循环中使用复选框列表中的项目。在该 foreach 循环中,我有一个 for 循环,它从用户输入中获取一个数字并从所需数量生成图像。每次输入一个数字时,该数字都会添加到数据库中。是否可以让我的 for 循环从我的数据库中的任何值开始,然后生成从数据库值开始输入的图像数量。

CREATE TABLE AccountTable
(
    RowID int IDENTITY(1, 1),
    AccountID varchar(2),
    AccountName varchar(50),
    SeqNum int,
    SeqDate datetime
)  
public class dbvalue
{
    public int db_value { get;set; }
}

//OnClick Method
cmd.CommandText ="SELECT SeqNum FROM AccountTable;";
int i = Int32.Parse(amount.Text);
SqlDataReader sdr = cmd.ExecuteReader();

while (sdr.Read())
{
    int k(int)sdr["SeqNum"];
    foreach(List item in CheckBoxList1.Items)
    {    
        for(int n = k; n <= i; n++) 
        {
            if (item.Selected)
            {
                System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
                string barcode_label = item.Text + "QTY:___________";
                string barode_data = item.Value + datepicker.Text + n.ToSTring("D2");

                Bitmap dynImage = DrawBarcode(barcode_data, barcode_label)

                MemoryStream ms = new MemoryStream();

                dynImage.Save(ms, ImageFormat.Jpeg);

                byte[] byteImage = ms.ToArray();

                Convert.ToBase64String(byteImage);

                img.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(byteImage);

                panel1.Controls.Add(img);

                double spacing;

                double mg = 5;

                spacing = img.Width.Value + mg;
            }
        }
    }
}


【问题讨论】:

  • 是的,可以让起始值使用数据库中的值。它要求您查询数据库,然后设置一个变量。
  • 忘了在我的问题中添加我的命令,我正在这样做,但它从用户数量开始并产生荒谬的数量时表现得很奇怪,我假设它与 foreach 循环有关并选择 1 个值,它将生成等于项目列表中所有数字的数量。
  • SeqQuant 不是您的 CREATE TABLE 语句描述的 AccountTable 的列
  • 另外,您说“一个数字已添加到数据库中”,但您的代码中没有一个包含 INSERT 语句
  • 对不起,我在我的问题中混淆了代码。我没有向数据库插入任何内容,数据库已经有行并且用户输入正在更新行。这些行会在 24 小时后重置。

标签: c# asp.net sql-server


【解决方案1】:

您需要从数据库中查询当前值的起始值,这样的查询就可以做到:

SELECT MAX(SeqNum) as MaxSeq FROM AccountTable

最简单的运行方法是:

var cmd = new SqlCommand("that SQL here", new SqlConnection("connection string here"))
cmd.Connection.Open()
var maxseq = Convert.ToInt32(cmd.ExecuteScalar());

您现在有了 maxSeq 变量,它是表中 SeqNum 的最大值。将 1 添加到它并使其成为您的下一个插入物

-

如果您只打算在一台 PC 上使用此应用程序,那就没问题了。如果您计划将多台计算机插入此表中,您确实应该考虑另一种计算图像的形式 - 可能让数据库使用其标识列自动增量来执行此操作,否则您将面临多条记录将具有的风险相同的 SeqNum 值

【讨论】:

  • 那么我会用它作为for(int n = maxseq; n &lt;= i; n++)吗?
  • 好吧,它可以尝试几次,但在我继续生成测试后,它会停止生成图像,除非用户输入的数字大于 maxseq,但数据库中的计数器继续正确更新。
猜你喜欢
  • 2016-02-02
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 2020-04-01
  • 1970-01-01
  • 2017-12-12
相关资源
最近更新 更多