阅读并生成新的编号

时间:2016-01-06 08:33:48

标签: c#

嗨,我是新来的,我只是想问这个代码的问题。

我在我的新按钮上创造了一个生成Enumber =员工编号的条件。

我有数据库,但还没有数据记录。如果我按下我的新按钮,我的sql语句将选择他在我的数据上的最后记录,但我还没有数据,所以我试图创造一个条件。

如果Enumber在数据库中为空,它应该返回并在我的textbox上给出新的Enumber = txtEnumber.Text =“100000”。

我希望你能理解我的问题。

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();

4 个答案:

答案 0 :(得分:3)

由于您的案例中没有任何行,因此您无法迭代您的阅读器。而不是那样,如果第一行的第一列中没有数据,则可以使用ExecuteScalar作为null返回object,因为您的查询返回为SELECT TOP 1..。< / p>

var result = cmd.ExecuteScalar();
if(result == null)
{
   txtEnumber.Text = "100000";
}

答案 1 :(得分:2)

您应该先检查是否有行。 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
}

答案 2 :(得分:0)

您应该使用dr.HasRows来检查是否有数据。

答案 3 :(得分:0)

SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read()) {
  dataTable.Load(dr);
}

如果您有多个结果,请使用&#39; foreach&#39;循环。

foreach (DataRow Drow in datatable.Rows)
{
   // read data for each record here
}

尝试这是有效的..