在我的发票表单中,我有 textEdit1
,它会在第一次显示 "INV001"
。然后我们将该发票表单详细信息存储到 MS Access 数据库中。下次 textEdit1
会自动显示下一个发票编号,例如 "INV002"
。如何执行此操作?
如果它只是数字,我试过此代码成功运行,但现在我也有 3 个字母,那么如何执行此操作?
OleDbConnection con =
new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/Srihari/Srihari/Invoice.accdb");
con.Open();
OleDbCommand cmd =
new OleDbCommand(
"SELECT * FROM NewInvoice_1 WHERE InvoiceNumber = (select max(InvoiceNumber) from NewInvoice_1)",
con);
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
int a = reader.GetInt32(1);
TXE_Invoice_Number.Text = (1 + a).ToString();
}
最佳答案
我会在数据库中存储 int
而不是 string
:
using(var con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/Srihari/Srihari/Invoice.accdb"))
using(var cmd = new OleDbCommand("SELECT MAX(InvoiceNumber) from NewInvoice_1", con))
{
con.Open();
int max = 0;
object objMax = cmd.ExecuteScalar();
if(objMax != null) max = (int) objMax;
int newMax = max++; // insert this into the database instead of the string "INV001"
// you can use newMax.ToString("000") or ToString("D3") or ToString().PadLeft(3, '0')
string newNumber = string.Format("INV{0}", newMax.ToString().PadLeft(3, '0'));
// ...
}
如果您坚持使用 string
和这种模式 "INV001"
:
string maxStr = (string)cmd.ExecuteScalar() ?? "INV0";
int newMax = int.Parse(maxStr.Substring(3)) + 1;
string newNumber = string.Format("INV{0}", newMax.ToString().PadLeft(3, '0'));
在这个 Substring
方法中,是否有前导零并不重要。
关于c# - 如何使用 c# Winforms 执行字符串和整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21252546/