关于vb.net自动生成编号的问题

diamondcong 2020-05-08 03:23:40
开发环境VS2019+SQL2012
本人想实现自动生成个人编号,格式为yymmdd(即当天日期)+xxx
大致想法是:
1.在数据库中模糊查询编号带有是yymmdd的最大值记录
2.如果没有返回值,则新编号是yymmdd+001
3.如果有返回值,取返回值的后四位,做加1处理,得到答新编号
代码如下
 Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim cnStr As String = " Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=xxxx;Data Source=xxxx"
cn = New SqlConnection(cnStr) '连接数据库
cn.Open()

Dim id, nowdata As String
nowdata = Format(DateTime.Now, "yyMMdd") '获取今天日期
'第一步,模糊查询现有最大编号
Dim str As String = "Select max(PatID) from current_Patient where PatID like'%" & nowdata & "%'"
da = New SqlDataAdapter(str, cn)
ds.Clear()
da.Fill(ds, "ss号")

DataGridView1.DataSource = ds.Tables("ss号") '测试查询编号

If ds.Tables("ss号").Rows.Count = 0 Then '判断编号是否为当天新号

id = Format(DateTime.Now, "yyMMdd").ToString * 1000 '第二步,没有返回值,建立新编号
TextBox2.Text = id + 1
Else
TextBox2.Text = ds.Tables("ss号").Rows(0).Item(0).ToString + 1 '有返回值,最大值编号+1
End If
cn.Close()

End Sub

理论上 没有新编号,则Select max(PatID) 返回的内容应该是这样

现在的问题是 Select max(PatID) 返回的内容是一个空格

导致了后面 ds.Tables("ss号").Rows.Count = 0的判断一直为false
希望有懂得这方面知识的大神帮帮忙,万分感谢!!!
...全文
436 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
diamondcong 2020-05-11
  • 打赏
  • 举报
回复
引用 3 楼 三楼一郎 的回复:
那么你的语句究竟是”select partid from ……“ 还是 ”select max(partid) from ……“呢,你的代码里写的是select max(partid),查询分析器里又是select partid,这两个语句返回的结果并不一样

select partid from ……无符合条件记录时返回的是空记录集,你可以通过.rows.count是不是等于0来判断

select max(partid) from ……无符合条件记录时通常返回一条值为NULL的记录,所以你不能使用.rows.count=0来判断,而只能通过.rows(0).item(0)的值是不是system.dbnull.value对象来判断,既然你要使用.rows(0).item(0)去取返回的第一个记录那么首先必须得保证
.rows.count不等于0,否则就会报未将对象引用到实例的错

这么简单的问题不知道你在搅和啥呢。

确实是我写错了,当时我尝试用.rows(0).item(0)的值是不是system.dbnull.value对象来判断,结果还是未找到对象引用
现在已经改为另外一种方法去编写编号了
三楼の郎 2020-05-10
  • 打赏
  • 举报
回复
那么你的语句究竟是”select partid from ……“ 还是 ”select max(partid) from ……“呢,你的代码里写的是select max(partid),查询分析器里又是select partid,这两个语句返回的结果并不一样 select partid from ……无符合条件记录时返回的是空记录集,你可以通过.rows.count是不是等于0来判断 select max(partid) from ……无符合条件记录时通常返回一条值为NULL的记录,所以你不能使用.rows.count=0来判断,而只能通过.rows(0).item(0)的值是不是system.dbnull.value对象来判断,既然你要使用.rows(0).item(0)去取返回的第一个记录那么首先必须得保证 .rows.count不等于0,否则就会报未将对象引用到实例的错 这么简单的问题不知道你在搅和啥呢。
diamondcong 2020-05-09
  • 打赏
  • 举报
回复
引用 1 楼 X-i-n 的回复:

da = New SqlDataAdapter(str, cn)
这一行中断,看下监视里 str的实际内容是什么。
然后,把str这句SQL复制到sql server里运行一下看看结果。


把str复制到sqlserver中,没有新编号时结果返回是空值NULL(在VS监视器也是这样)

这种情况估计是If ds.Tables("ss号").Rows.Count = 0判断无法识别NULL,所以一直是false
我的另外一个贴有人提到了https://bbs.csdn.net/topics/396524152
X-i-n 2020-05-08
  • 打赏
  • 举报
回复
在 da = New SqlDataAdapter(str, cn) 这一行中断,看下监视里 str的实际内容是什么。 然后,把str这句SQL复制到sql server里运行一下看看结果。
1、可以设置,修改,增加学期信息,例如:2007年上学期,但是您必须设置一个默认学期为当前学期; 2、可以设置,修改,增加院系信息,如果是小学中学和高中不分院系,可以直接默认为本部,这样班级都是隶属于一个院系(本部)的。 3、可以设置,修改,增加教师信息,也可以批量增加教师信息,批量增加的教师姓名都是教师编号,可以教师登录后台后自己修改姓名等信息 4、可以设置,修改,增加班级信息,但是班级必须隶属于某个院系,有班级后才可以设置学生和课程。 5、可以设置,修改,增加学生信息,也可以批量增加学生信息,批量增加的学生姓名都是学生编号,可以学生登录后台后自己修改姓名等信息,学生增加的时候必须选择相关的班级。 6、可以设置,修改,增加课程信息,包括课程的开课教师,开课课时,开课班级等信息,此功能能配合课程表生成教师和班级课程表。 7、登录日志可以查看教师,学生,管理员的登录情况。 8、数据维护可以备份数据库,也可以直接操作SQL语句(不建议使用),这样数据可以更容易备份,系统更安全。 9、学生可以前台查询自己本学期的课程的成绩信息; 10、可以自动计算一个班级的所有学生成绩的整体排名和名次信息; 11、提供成绩的快速输入功能,批量给成绩,提供成绩的计算规则设置; 例如:(平时成绩*10%+作业成绩*10%+期中成绩*20%+期末成绩*60%=总分) 12、教师可以通过成绩排序来排布本课程的学生成绩的高低名次 13、提供成绩分析功能,可以查看某个课程成绩的分数分配比例 例如:开课人数30人 分析时间 2008-7-28 4:04:25 总分 2037 分 平均分 67.9 分 最高分 85 分 最低分 35 分 均分以上人数 29 人 均分以下人数 1 人 14、其它功能用户可以考用户手册; 15、教师可以查看本学期开设的课程,通过成绩管理功能进入学生成绩的录入功能; 16、教师可以通过成绩分析功能,分析课程的优秀,及格等比例的信息 17、教师还可以通过成绩汇总功能,对一个班级开设的全部课程进行总体的分析,计算全体课程的总分,名次等信息。 不在需要传统的计算器来完成 18、可以通过导出到EXCEL功能导出数据到您的机器,通过EXCEL来打印成绩数据,管理,数据保存更方便。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧