读取并生成新枚举器

本文关键字:枚举 新枚举 读取 | 更新日期: 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作为objectExecuteScalar

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
}

试试这个就成功了。。