0

我使用 SQL Server 2012 和 VS 2012。我有一个包含以下数据的表:

TagID      SessionID       ScanningTime
 int       nvarchar          datetime
---------------------------------------
4820427      Test1    2013-08-16 14:20:17.447

我创建了一个 UPDATE 查询以将 DGV 中所做的任何更改(添加的任何记录或编辑的现有记录)保存回 SQL DB。

因此,例如,我将添加一条新记录并将现有记录编辑为如下所示:

TagID      SessionID       ScanningTime
 int       nvarchar          datetime
---------------------------------------
4820000     Test1     2013-08-16 14:20:17.447
3242341     Test1     2013-08-16 14:20:17.447

并单击按钮更新数据库:

private void UpdateBtn_Click(object sender, EventArgs e)
        {
            DataTable queryResult = new DataTable();
            foreach (DataGridViewRow  row in dataGridView1.Rows)
            {
                int tagID = Convert.ToInt32(row.Cells["TagID"].Value);
                string sessionID = Convert.ToString(row.Cells["SessionID"].Value);
                DateTime ScanningTime = Convert.ToDateTime(row.Cells["ScanningTime"].Value);

            string ConnStr = "Data Source=DUZY;Initial Catalog=AutoRegSQL;Integrated Security=True";

            SqlConnection MyConn = new SqlConnection(ConnStr);
            MyConn.Open();

            //SQL query that returns todays sessions for the given roomID
            string query = @"UPDATE Attendance" +
               " SET TagID= @tagNo, SessionID= @sessionNo, ScanningTime= @scantime ";

            SqlCommand command = new SqlCommand(query, MyConn);

            command.Parameters.Add("tagNo", SqlDbType.Int).Value =  tagID;
            command.Parameters.Add("sessionNo", SqlDbType.VarChar).Value = sessionID;
            command.Parameters.Add("scantime", SqlDbType.DateTime).Value = ScanningTime;

            SqlDataAdapter adapter = new SqlDataAdapter(command);


            adapter.Fill(queryResult);


            MyConn.Close();

            }
        }

当我单击按钮保存更改时,我收到一个错误:

An unhandled exception of type 'System.Data.SqlTypes.SqlTypeException' occurred in System.Data.dll

Additional information: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

编辑

回顾我的 SSMS,尝试更新表后,出勤表的内容发生了变化。原始记录被手动添加的记录替换(尽管有错误)。

UPDATE查询执行后的考勤表:

    TagID      SessionID       ScanningTime
     int       nvarchar          datetime
    ---------------------------------------
    5453453     Test1   2013-08-16 14:20:00.000
4

2 回答 2

0

尝试像 SQL 中的通用文字一样格式化日期时间,也就是说YYYYMMDD hh:mm:ss[.mmm],因为这种格式与文化无关

或者,你甚至可以试试这个:

string myDatetime = ScanningTime .ToString("yyyy-MM-ddTHH:mm:ss.fff");

并在 UPDATE 语句中传递新变量myDateTime‚。

您需要首先检查的一件事是 ScanningTime 是否可能为 NULL,因为 SQL 表中的 datetime 字段需要一些值,而对于 datetime 数据类型,最小值为1/1/1753 12:00:00,最大值为12/31/9999 11:59:59

于 2013-08-16T13:57:02.557 回答
0

该问题很可能是 SQL Server 对在这种情况下不正确的日期格式做出了假设。

当您将 DateTime 添加到您的参数时,尝试像这样转换您的 DateTime:

ScanningTime.ToString("yyyy-MM-dd HH:mm:ss");

让我知道这是否有帮助。

于 2013-08-16T13:48:35.480 回答