我有一个生成条形码的网络应用程序。它按用户输入的金额创建条形码,然后使用金额,日期值和复选框列表中的值生成代码。然后,用户输入的数据使用存储过程发送到数据库。相应表格中的日期值和金额值每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循环中选择的项目执行阅读器,因为它们已经被用于自己生成条形码。