2016-05-31 32 views
1

我知道这个错误意味着我试图插入一个大于我在数据库中允许的值,但我看不到值引起的问题MVC - 字符串或二进制数据将被截断。 r n声明已终止

这是我在插入数据:

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) 
); 

在调试器中我使用长度命令看我传递中的值的长度,这是我的结果:

 log.UserEmail.Length; 
     21 
     log.Query_End.Length; 
     8 
     log.Query_Start.Length; 
     8 
     log.SQL_Query.Length; 
     32 

这是将是数据的样本进入 enter image description here

这是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; } 
} 
+1

为什么你使用varchars的时间?为什么不使用日期时间并存储它?显然其中一项太长,请调试 –

+0

您可以显示'UserActivity'类定义,'Duration'变量定义/赋值,并给出'Query_Time'字段/属性中的一个值的示例吗?我怀疑这个问题可能是'Query_Time'。 – Zack

+0

如果我有'DateTime start = DateTime.Now - TimeSpan.FromMinutes(2);','DateTime end = DateTime.Now;'和'TimeSpan Duration = end - start;'然后设置'log.Query_Time = String .Format(“{0:mm:ss.ff}”,Duration.ToString()'then'log.QueryTime'等于'“00:02:00.0030060”' – Zack

回答

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 protected]"; 
    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()); 
} 
3

你这里的问题是持续时间的格式,我假定这是一个时间跨度对象。如果您的持续时间为3分45秒210毫秒,则您的Query_Time变量设置为00:03:45.210000。

您将要使用以下而非目前的String.Format:

log.Query_Time = Duration.ToString("mm\\:ss\\.ff"); 

这会给你喜欢03的输出:45.21,我想象是你被瞄准。

相关问题