使用数据库值在动态生成的图像中创建数字序列

时间:2016-08-25 16:41:29

标签: c# asp.net sql-server

我有一个生成条形码的网络应用程序。它按用户输入的金额创建条形码,然后使用金额,日期值和复选框列表中的值生成代码。然后,用户输入的数据使用存储过程发送到数据库。相应表格中的日期值和金额值每24小时重置一次,但如果用户输入值,则按一天中的顺序增加。我想弄清楚的是,如果我可以在我生成的图像中实现该序列。我试图使用SQL Reader,但我不知道如何正确实现它,因为它在foreach和for循环中。 foreach获取复选框列表中的选定值,然后在for循环中从输入的金额开始创建所需的金额。

例如

1st. Attempt

[X] AB
[] BC
[] CD
[] DE

Please Enter Amount [   4]
Please Enter Date   [08/24/2016]

Barcodes:
AB08241601   AB08241602   AB08241603  AB08241604

2nd. Attempt

[X] AB
[] BC
[] CD
[] DE

Please Enter Amount [   3]
Please Enter Date   [08/24/2016]

Barcodes:
AB08241605  AB08241606   AB08241607  

以下是适用的代码

protected void Generate(object sender, EventArgs e)
{

       CultureInfo provider = CultureInfo.InvariantCulture;
       System.Globalization.DateTimeStyle style = DateTimeStyle.None;
       DateTime dt;
       DateTime.TryParseExact(datepicker.Text, "mmddyyyy", provider, style out dt);
       int i = Int32.Parse(amount.Text);

       SqlConnection conn = new SqlConnection(GetConnectionString());
       SqlCommand cmd = new SqlCommand();
       cmd.Connection = conn;


      foreach(List item in CheckBoxList1.Items)
      {    
         for(int n = 1; n <= i; n++) 
         {

         if (item.Selected)
         {

            System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
            string barcode_label = item.Text + "QTY:___________"

           //When image generates, it will show 1 to user input amount                 
           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(ListItem item2 in CheckBoxList1.Items)
       {

           if(item2.Selected)
           {

             //handling parameters in loop.

             cmd.Parameters["@SeqNum"].Value = amount.Text;
             cmd.Parameters["@SeqDate"].Value = DateTime.ParseExact(datepicker.Text, "mmddyyyy", CultureInfo.InvariantCulture);
             cmd.Parameters["@Account_ID"].item2.Value;
             cmd.ExecuteNonQuery();

                 try
                 {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                 }

                   catch (SqlException ex)
                   {
                     MessageBox.Show(ex.Message);
                   }

                  finally
                  {
                     conn.Close();
                  }


             }

       }

}

SQL代码

 CREATE TABLE AccountTable
 (
     RowID int IDENTITY(1, 1),
     AccountID varchar(2),
     AccountName varchar(50),
     SeqNum int,
     SeqDate datetime
 )  

  CREATE PROCEDURE [ACCOUNTTABLE_UPDATE]
  (
    @SeqNum int,
    @SeqDate datetime,
    @Account_ID varchar(2)
  )

AS 
 SET NOCOUNT ON
  BEGIN
   UPDATE AccountTable
     SET SeqNum = SeqNum + @SeqNum, SeqDate = @SeqDate
     WHERE AccountID = @AccountID
  END

SqlDataReader()尝试

 cmd.CommandText = "SELECT SeqNum FROM AccountTable;";

 conn.Open();
 SqlDataReader sdr = cmd.ExecuteReader();
 foreach(List item in CheckBoxList1.Items)
 {    
     for(int n = 1; n <= i; n++) 
     {

     if (item.Selected)
     {
       if(sdr.Read())
       {

        n = (int)sdr["SeqNum"];
        System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
        string barcode_label = item.Text + "QTY:___________"

       //When image generates, it will show 1 to user input amount                 
       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;

     }

    }

  } 

}

当数据库正确更新时,它只显示在数据库中找到的值,并生成带有数据库值的第一个条形码和值为0的所有其他条形码。显示的条形码数量对应于总项目的长度我的复选框列表。对于下面的示例,如果选中复选框的数据= 4,如果我运行我的代码,我的数据库中的值正确地更改为6,但我得到下面的结果

[X] AB
[] BC
[] CD
[] DE

  Please Enter Amount [   2]
  Please Enter Date   [08/24/2016]

  Barcodes:
  AB08241604  AB08241600   AB08241600  AB08241600

我不知道如何使用foreach循环中选择的项目执行阅读器,因为它们已经被用于自己生成条形码。

0 个答案:

没有答案