Asp.net 我无法为用户生成ID

Asp.net 我无法为用户生成ID,asp.net,visual-studio-2008,Asp.net,Visual Studio 2008,我想生成id。我的应用程序采用三层结构(使用asp.net&vs 2008)。为此,我从class1.cs文件中编写的用户界面(webpg1.aspx.cs)调用一个方法。我假设数据库中目前没有记录,所以id可以是1,2,3…n。所以请告诉我哪里出了问题。 从webpg1.aspx.cs调用 int verify = j.insertReg(ad,un,pwd); public int regUser(int id, string un, string pwd) { int cms =

我想生成id。我的应用程序采用三层结构(使用asp.net&vs 2008)。为此,我从class1.cs文件中编写的用户界面(webpg1.aspx.cs)调用一个方法。我假设数据库中目前没有记录,所以id可以是1,2,3…n。所以请告诉我哪里出了问题。
webpg1.aspx.cs调用

int verify = j.insertReg(ad,un,pwd); 
public int regUser(int id, string un, string pwd)
{
  int cms = 0; 
  int id1 = 0;
  int c2 = openDb();

  if (c2 < 0)
  {
    if (ad ==0)
      id1 = callgenId(ad);

   cm = new SqlCommand("INSERT INTO regAgnt VALUES('"
                                + id1 +"','"+ un +"','"+ pwd +"')",cn);
    cms = cm.ExecuteNonQuery();
  }
  else
  {
    cms = c2;
  }

  return cms;
}

private int callgenId(int id)
{
  int idi = 0;
  cm = new SqlCommand("select MAX(aid) from regAgnt", cn);
  dr = cm.ExecuteReader();
  while (dr.Read())
  {
    if(Convert.ToInt32(dr[0])== 0)
      idi += 1;

    dr.Close();
   }
   return idi;
}
实现
class1.cs

int verify = j.insertReg(ad,un,pwd); 
public int regUser(int id, string un, string pwd)
{
  int cms = 0; 
  int id1 = 0;
  int c2 = openDb();

  if (c2 < 0)
  {
    if (ad ==0)
      id1 = callgenId(ad);

   cm = new SqlCommand("INSERT INTO regAgnt VALUES('"
                                + id1 +"','"+ un +"','"+ pwd +"')",cn);
    cms = cm.ExecuteNonQuery();
  }
  else
  {
    cms = c2;
  }

  return cms;
}

private int callgenId(int id)
{
  int idi = 0;
  cm = new SqlCommand("select MAX(aid) from regAgnt", cn);
  dr = cm.ExecuteReader();
  while (dr.Read())
  {
    if(Convert.ToInt32(dr[0])== 0)
      idi += 1;

    dr.Close();
   }
   return idi;
}
public int-regUser(int-id,string-un,string-pwd)
{
int-cms=0;
int id1=0;
int c2=openDb();
如果(c2<0)
{
如果(ad==0)
id1=callgenId(ad);
cm=新的SqlCommand(“插入到regAgnt值(')”
+id1+“,”+un+“,”+pwd+“)”,cn);
cms=cm.ExecuteNonQuery();
}
其他的
{
cms=c2;
}
返回cms;
}
私有int-callgenId(int-id)
{
int idi=0;
cm=新的SqlCommand(“从regAgnt中选择最大(辅助)”,cn);
dr=cm.ExecuteReader();
while(dr.Read())
{
if(转换为32(dr[0])==0)
idi+=1;
Close博士();
}
返回idi;
}
它在表中生成0的输出,我还将表中的默认值绑定为0


谢谢

如果结果集中没有信息-dr.Read()不会发生。

如果结果集中没有信息-dr.Read())不会发生。为什么不在表中设置一个自动增量字段,而不是滚动自己的字段?如果在结果集中找不到信息,我应该如何在DataReader对象中设置数据集..?强制检查dr是否返回null后-
dr=cm.ExecuteReader();idi=dr.IsDBNull(1)?0:Convert.ToInt32(dr[0])我收到此错误-
在没有数据存在的情况下尝试读取无效。
在这种情况下,有什么解决方案。这意味着。。它没有到达database.table中,或者无法从表中获取任何记录。?如果我的sql查询选择的最高id正确吗。。。我不知道出了什么问题。。桌面应用程序平台上正在运行完全相同的查询。如果表中没有记录,它将永远不会执行读取,并且您的id将始终为零。在数据库中的主键上使用自动递增会容易得多,而且您不必使用自定义逻辑。实际上,先生,我的表中有记录,关于-autoincrement,如果用户使用相同的记录重新加载按钮,它将创建具有新id的相同用户,因为id正在生成,而不会让用户知道。