MVC -String或二进制数据将被截断。\ r \ n语句已终止

时间:2016-05-31 14:07:25

标签: c# asp.net asp.net-mvc

我理解这个错误意味着我试图插入的值大于我在数据库中允许的值,但我看不出哪个值导致了问题

这是我插入数据的地方:

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

这是将输入的数据样本 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; }
}

2 个答案:

答案 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());
}