C# 如何在ado.net中只显示数据库中的最后一条记录
存储过程C# 如何在ado.net中只显示数据库中的最后一条记录,c#,sql,asp.net,database,ado.net,C#,Sql,Asp.net,Database,Ado.net,存储过程 Create Procedure [dbo].[Sp_User] ( @Id int=null, @FullName varchar(50)=null, @Password varchar(50)=null, @Address varchar(100)=null, @Email varchar(50)=null, @Imgurl varchar(50)=null, @Activity varchar(50)=null
Create Procedure [dbo].[Sp_User]
(
@Id int=null,
@FullName varchar(50)=null,
@Password varchar(50)=null,
@Address varchar(100)=null,
@Email varchar(50)=null,
@Imgurl varchar(50)=null,
@Activity varchar(50)=null
)
As Begin
if(@Activity='Add')
insert into registration
(FullName,[Password],[Address],Email,Imgurl)
values
(@FullName,@Password,@Address,@Email,@Imgurl)
if(@Activity = 'All')
select top 1 FullName,Email,Password,imgurl from registration order by Id desc
End
在用户DAL中
public List<User>All(ActivityMode a)
{
SqlConnection con = ConnectionDAL.SQL();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Sp_User";
cmd.Parameters.AddWithValue("@activity", a.ToString());
List<User> lst = null;
con.Open();
using (con)
{
SqlDataReader DR = cmd.ExecuteReader();
if (DR.HasRows)
{
lst = new List<User>();
while (DR.Read())
{
User obj = new User();
obj.Id = Convert.ToInt32(DR["Id"]);
obj.FullName = DR["FullName"].ToString();
obj.Email = DR["Email"].ToString();
obj.Password = DR["Password"].ToString();
obj.Address = DR["Address"].ToString();
obj.Imgurl = DR["Imgurl"].ToString();
lst.Add(obj);
}
}
}
return lst;
}
如何解决?请帮助我。存储过程中缺少Id列 这是正确的句子: 按Id desc从注册顺序中选择前1个Id、全名、电子邮件、密码、imgurl 请试试这个
问候 存储过程中缺少Id列 这是正确的句子: 按Id desc从注册顺序中选择前1个Id、全名、电子邮件、密码、imgurl 请试试这个
问候 出现此错误的原因是存储过程没有选择要读取的所有列,您需要确保此处的选择列表:
select top 1 FullName,Email,Password,imgurl from registration order by Id desc
包含您在此处阅读的所有列:
User obj = new User();
obj.Id = Convert.ToInt32(DR["Id"]);
obj.FullName = DR["FullName"].ToString();
obj.Email = DR["Email"].ToString();
obj.Password = DR["Password"].ToString();
obj.Address = DR["Address"].ToString();
obj.Imgurl = DR["Imgurl"].ToString();
lst.Add(obj);
另一方面,我建议您创建单独的存储过程来读取和写入数据,以便可以对它们授予独立的权限。您可能还需要在读取时检查空值
DR["<column>"]
DR[“”]
可能会导致DBNull.Value(如果该列可为null)以及实际值,并且如果在本例中尝试转换为int,则会出错。
您可能还想考虑为什么在多线程环境中选择“最后一个用户”,如果您依赖于先前插入的那个结果,您可能会看到意外结果。< P>您之所以看到这个错误,是因为存储过程没有选择您要读取的所有列,您需要确保此处的选择列表:
select top 1 FullName,Email,Password,imgurl from registration order by Id desc
包含您在此处阅读的所有列:
User obj = new User();
obj.Id = Convert.ToInt32(DR["Id"]);
obj.FullName = DR["FullName"].ToString();
obj.Email = DR["Email"].ToString();
obj.Password = DR["Password"].ToString();
obj.Address = DR["Address"].ToString();
obj.Imgurl = DR["Imgurl"].ToString();
lst.Add(obj);
另一方面,我建议您创建单独的存储过程来读取和写入数据,以便可以对它们授予独立的权限。您可能还需要在读取时检查空值
DR["<column>"]
DR[“”]
可能会导致DBNull.Value(如果该列可为null)以及实际值,并且如果在本例中尝试转换为int,则会出错。
您可能还想考虑为什么在多线程环境中选择“最后一个用户”,如果您依赖于先前插入的那个结果,您可能会看到意外结果。< P>问题是,当SELECT语句中没有ID时,您正试图获得它。 在下面的语句中,在select query like中添加Id
if(@Activity = 'All')
select top 1 Id, FullName,Email,Password,imgurl from registration order by Id desc
End
问题是,当select语句中并没有ID时,您正试图获取它 在下面的语句中,在select query like中添加Id
if(@Activity = 'All')
select top 1 Id, FullName,Email,Password,imgurl from registration order by Id desc
End