我有一个叫emp的表.该表包含三列empid,ename和薪金.我必须将Empid存储为自动生成的ID,例如:E001,E002,E003.如何使用C#做到这一点?
解决方法:
如果这不是家庭作业:
>考虑此ID命名方案对您的数据的限制.
>如果这些限制是不可接受的,请寻找一种更好的机制来生成唯一ID.一方面,是否真的需要将字母E与数字一起存储,还是可以将Empid设置为INT类型的列并以编程方式添加E?如果您从未在任何地方实际显示ID,请考虑使用例如GUID(请参阅.NET类型System.Guid的文档),因为它们被保证是唯一的(出于大多数实际目的).或者只是在empid列上使用数据库的自动增量功能.
如果这是家庭作业:
>删除的记录的ID是否可以回收(重用)以后再添加记录?
>尝试在.NET框架中找到一种方法,该方法可格式化带有任意数量的前导零的整数.例如1→“ 001”.
还尝试在.NET框架中找到相反的方法,例如“ 001”→1.
使用这两个函数可以在您的Ennn ID及其数字部分之间进行转换.
>从数据库表中检索所有现有的ID:
如果无法回收ID,请按降序顺序获取它们,告诉DB仅从排序后的结果集中返回第一个条目,然后从返回的ID值中确定下一个较大的ID.
如果您可以回收ID,请使其升序排列,并找到第一个间隙(即,当两个相邻ID的数字部分之间的差大于1时).建立一个新的ID,以使其落入这个空白.
一些示例代码片段:
将整数格式为E …字符串:
int numericPart = 123; // <-- example input
string empid = numericPart.ToString("'E'000");
从E …字符串中提取数字部分
(使用正则表达式,在您的情况下这实际上是过大的):
using System.Text.RegularExpressions;
...
string empid = "E123"; // <-- example input
var empidPattern = new Regex(@"^E(?<NumericPart>\d{3})$");
if (empidPattern.IsMatch(empid))
{
// extract numeric part from key and convert it to int:
int numericPart = Int32.Parse(
empidPattern.Match(empid).Groups["NumericPart"].Value);
}
else
{
// 'empid' does not represent a valid key (wrong format)
}
将数据库表中的现有键加载到集合中:
using System.Data;
// create a new collection that will hold all empid keys in emp
var empidList = new List<string>();
// open a database connection -- you need to add appropriate code here:
using (IDbConnection db = ...)
{
// define the query for retrieving all empid keys:
IDbCommand getEmpidList = db.CreateCommand();
getEmpidList.CommandType = CommandType.Text;
getEmpidList.CommandText = "SELECT empid FROM emp ORDER BY empid ASC";
// execute the query and transfer its result set to the collection:
using (IDataReader reader = getEmpidList.ExecuteReader())
{
while (reader.Read())
{
empidList.Add(reader.GetString(0));
}
}
}
我将把这些部分放在一起,添加上面描述的实际逻辑,并进一步改进代码.
标签:c,ms-access 来源: https://codeday.me/bug/20191106/2000553.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。