读取并生成新枚举器
本文关键字:枚举 新枚举 读取 | 更新日期: 2023-09-27 18:29:04
嗨,我是新来的,我只想问这个代码的问题。
我在我的新buttom上设置了一个条件,生成Enumber=员工编号。
我有数据库,但还没有数据记录。如果我按下我的新按钮,我的sql语句将选择我数据上的最后一条记录,但我还没有数据,所以我正在尝试创建一个条件。
如果Enumber在数据库中为空,它应该返回并在我的textbox=txtEnumber.Text="100000"上给出新的Enumber。
我希望你能理解我的问题。
con.Open();
cmd = new SqlCommand("SELECT TOP 1 Enumber FROM Employee ORDER BY Enumber DESC ", con);
dr = cmd.ExecuteReader();
dr.Read();
if (dr["Enumber"] == null) // Error: "Invalid attempt to read when no data is present."
{
txtEnumber.Text = "100000";
return;
}
else
{
String a = dr["Enumber"].ToString();
txtEnumber.Text = ("");
for (int i = 0; i < 1; i++)
{
string val = a.Substring(1, a.Length - 1);
int newnumber = Convert.ToInt32(val) + 1;
a = newnumber.ToString("100000");
}
txtEnumber.Text = a;
}
con.Close();
由于您的案例中没有任何行,因此无法迭代读取器。相反,如果由于查询返回为SELECT TOP 1..
,所以第一行的第一列中没有数据,则可以使用返回null
作为object
的ExecuteScalar
。
var result = cmd.ExecuteScalar();
if(result == null)
{
txtEnumber.Text = "100000";
}
您应该先检查是否有行。dr.Read()返回DataReader是否有行,使用它。您的DataReader没有返回任何结果。。。
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read()) {
// read data for first record here
}
如果有多个结果,请使用"while"循环。
while (dr.Read()) {
// read data for each record here
}
您应该使用dr.HasRows来检查是否有数据。
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read()) {
dataTable.Load(dr);
}
如果有多个结果,请使用"foreach"循环。
foreach (DataRow Drow in datatable.Rows)
{
// read data for each record here
}
试试这个就成功了。。