我想使用asp.net更新我的SQL Server表,但它不起作用

时间:2018-02-04 12:00:31

标签: c# sql asp.net sql-server

我有一个表Attendance,其中包含EmployeeId,Date,Clock in和clock out列。当用户单击按钮中的时钟时,时钟输出按钮将为空。现在我想创建一个时钟输出按钮,用户可以根据他们的员工ID和日期更新他们的表。

string updateCommand = "UPDATE attendances SET ClockOut = @Time Where EmployeeId = @Id and Date = @Date";
String EmployeeConnectionString = "Data Source=USER-PC;Initial Catalog=1GCAttendanceManagementSystem;Integrated Security=True";

SqlConnection con2 = new SqlConnection(EmployeeConnectionString);
con2.Open();

TimeSpan time = new TimeSpan();
time.ToString();

cmd.Parameters.AddWithValue("@Id", txtID.Text);
cmd.Parameters.AddWithValue("@Date", DateTime.Now);
cmd.Parameters.AddWithValue("@Time", Convert.ToDateTime(DateTime.Now.ToString("hh:mm:ss tt")));

cmd.Connection = con2;
cmd.CommandText = updateCommand;
cmd.ExecuteNonQuery();

1 个答案:

答案 0 :(得分:2)

正如我在评论中写的那样,它与你的where子句的and Date = @Date部分有关。

我认为可以肯定地说,数据库中没有记录的Date列的值为DateTime.Now。它应该是DateTime.Today 另外,正如marc_s所指出的那样,你不应该使用AddWithValue(),正如我在第一条评论中暗示的那样,每当使用实现using的类的实例时,你应该使用IDisposable语句。接口。所以这就是我可能会写的:

var updateCommand = "UPDATE attendances SET ClockOut = @Time Where EmployeeId = @Id and Date = @Date";
var EmployeeConnectionString = "Data Source=USER-PC;Initial Catalog=1GCAttendanceManagementSystem;Integrated Security=True";

using(var con2 = new SqlConnection(EmployeeConnectionString))
{
    using(var cmd = new SqlCommand(updateCommand, con2))
    {
        cmd.Parameters.Add("@Id", SqlDbType.Int).Value = txtID.Text;
        cmd.Parameters.Add("@Date", SqlDbType.Date).Value = DateTime.Today;
        cmd.Parameters.Add("@Time", SqlDbType.Time)Value = DateTime.Now.TimeOfDay;
        con2.Open();
        cmd.ExecuteNonQuery();    
    }
}

请注意,我必须猜测命令参数的数据类型,您可能需要更改它们。