我有以下课程;

public class Hotel
{
    public string Name {get;set;}
    public double? MinRate {get;set;}
    public double? MaxRate {get;set;}
}


如您所见,MinRate或MaxRate的值可以为null。我正在使用以下代码从“酒店”类列表中获取数据;

var HotelList =
       String.Join(",", Hotel.Select(m => String.Format("('{0}','{1}','{2}')",
       MySqlHelper.EscapeString(m.Name),  m.MinRate, m.MaxRate)));


这很好。 HotelList变量将与MySQL INSERT语句一起使用,例如

INSERT INTO Hotels (Name,MinRate,MaxRate) VALUES
(ABC Hotel','125','199'),('DEF','','');


我的问题是,有时MinRate或MaxRate的值可以为null,这在类中进行了处理。但是对于MySQL INSERT语句,我需要以某种方式将值设置为null,因为出现错误

错误代码:1265。第5行的“ MinRate”列的数据被截断

任何想法如何克服这个问题。

最佳答案

检查您的可为空类型是否具有HasValue值:

var HotelList =
       String.Join(",", Hotel.Select(m => String.Format("('{0}',{1},{2})",
       MySqlHelper.EscapeString(m.Name),  m.MinRate.HasValue?("'"+m.MinRate.Value.ToString()+"'"):"NULL", m.MaxRate.HasValue?("'"+m.MaxRate.Value.ToString()+"'"):"NULL")));


也就是说,总是最好使用查询参数来避免SQL Injection攻击。

10-07 15:40