我理解这个错误意味着我试图插入的值大于我在数据库中允许的值,但我看不出哪个值导致了问题
这是我插入数据的地方:
UserActivity log = new UserActivity();
ApplicationDbContext db = new ApplicationDbContext();
log.UserEmail = User.Identity.Name;
log.SQL_Query = queryString;
log.Query_Start = String.Format("{0:hh:mm:ss}", start);
log.Query_End = String.Format("{0:hh:mm:ss}", end);
log.Query_Time = String.Format("{0:mm:ss.ff}", Duration.ToString());
db.UserActivities.Add(log);
db.SaveChanges();
这是数据库表定义:
CREATE TABLE [dbo].[UserActivities] (
[Id] INT NOT NULL,
[UserEmail] VARCHAR (255) NOT NULL,
[SQL_Query ] VARCHAR (1000) NOT NULL,
[Query_Start] VARCHAR (11) NULL,
[Query_End] VARCHAR (11) NULL,
[Query_Time] VARCHAR (11) NULL,
[Error_Message] VARCHAR (255) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
在调试器中我使用length命令查看我传入的值的长度,这是我的结果:
log.UserEmail.Length;
21
log.Query_End.Length;
8
log.Query_Start.Length;
8
log.SQL_Query.Length;
32
这是UserActivity类
public class UserActivity
{
[Key]
public int Id { get; set; }
public string UserEmail { get; set; }
public string SQL_Query { get; set; }
public string Query_Start { get; set; }
public string Query_End { get; set; }
public string Query_Time { get; set; }
public string Error_Message { get; set; }
}
答案 0 :(得分:3)
这里的问题是持续时间的格式化,我假设这是一个TimeSpan对象。如果您的持续时间为3分45秒210毫秒,则使用您目前获得的内容,将Query_Time变量设置为:00:03:45.210000。
您将需要使用以下代替当前的String.Format:
log.Query_Time = Duration.ToString("mm\\:ss\\.ff");
那会给你一个类似03:45.21的输出,我想这就是你的目标。
答案 1 :(得分:2)
使用下面显示的逻辑,我在"00:02:00.0030060"
中获得log.Query_Time
的值,这就是为什么我怀疑这是您遇到问题的原因。该字符串为16个字符,数据库中的Query_Time
列仅为11个字符。
public class UserActivity
{
public string UserEmail { get; set; }
public string SQL_Query { get; set; }
public string Query_Start { get; set; }
public string Query_End { get; set; }
public string Query_Time { get; set; }
}
static void Main(string[] args)
{
UserActivity log = new UserActivity();
DateTime start = DateTime.Now - TimeSpan.FromMinutes(2);
DateTime end = DateTime.Now;
TimeSpan Duration = end - start;
log.UserEmail = "email@here.gov";
log.SQL_Query = "exec FTSP_FTProblemsByCategory 5";
log.Query_Start = String.Format("{0:hh:mm:ss}", start);
log.Query_End = String.Format("{0:hh:mm:ss}", end);
log.Query_Time = String.Format("{0:mm:ss.ff}", Duration.ToString());
}