您好我在mvc上有考勤和离开系统使用Ado.Net我的连接名称是(DBConnection)我有两个方法一用于OnClick TimeIn和AND OTHER用于TimeOut,我的数据库名称LoginTime和我的表是出勤我有问题在onclick timein Btton检查我的考勤表中是否不存在行插入新行显示消息“你已经有时间”
public void Addtime(Attendance AddTim)
{
SqlCommand comm = new SqlCommand("select * from Attendance where UserID=@user", conn);
comm.Parameters.AddWithValue("@user", AddTim.UserID);
conn.Open();
var rd = comm.ExecuteReader();
bool sat = rd.Read();
conn.Close();
if (sat == true)
{
SqlCommand updCommand = new SqlCommand("UPDATE Attendance SET TimeIn=@timein WHERE UserID=@userid", conn);
updCommand.Parameters.AddWithValue("@userid", AddTim.UserID);
updCommand.Parameters.AddWithValue("@timein", DateTime.Now);
conn.Open();
int rowsUpdated = updCommand.ExecuteNonQuery();
var rdr = comm.ExecuteReader();
conn.Close();
}
else
{
SqlCommand insCommand = new SqlCommand("INSERT into Attendance (UserID,TimeIn) VALUES (@userid,@timein)", conn);
insCommand.Parameters.AddWithValue("@userid", AddTim.UserID);
insCommand.Parameters.AddWithValue("@timein", DateTime.Now);
conn.Open();
int rowsUpdated = insCommand.ExecuteNonQuery();
var rdr = comm.ExecuteReader();
conn.Close();
}
}
public void Addtimout(Attendance addtimout)
{
SqlCommand UpDCommand = new SqlCommand("UPDATE Attendance SET TimeOut=@timeout WHERE UserID=@userid", conn);
UpDCommand.Parameters.AddWithValue("@UserID", addtimout.UserID);
UpDCommand.Parameters.AddWithValue("@timeout", DateTime.Now);
conn.Open();
UpDCommand.ExecuteNonQuery();
conn.Close();
}
}
}
答案 0 :(得分:0)
那么我可以从你的问题中推断出更多内容,并且没有真正解释你所得到的错误(如果有的话)。如果是这样,请发布错误或意外行为,数据库架构也会有所帮助
我确实注意到你正在该块中执行多个insert或update语句,因为你正在执行每个查询两次;一次为NonQuery
,另一次为Reader
。
int rowsUpdated = insCommand.ExecuteNonQuery();
var rdr = comm.ExecuteReader();
要检查的原始查询对我来说并不好看。如果您只是想检查行数,可以使用SELECT Count(*)
,然后通过ExecuteScalar()
执行。这将消除Reader的开销
public void Addtime(Attendance AddTim) {
SqlCommand comm = new SqlCommand("select Count(*) from Attendance where UserID=@user", conn);
comm.Parameters.AddWithValue("@user", AddTim.UserID);
conn.Open();
int uc = (int)comm.ExecuteScalar();
bool sat = (uc > 0);
conn.Close();