C# Double Nullable with MySQL INSERT
本文关键字:MySQL INSERT with Nullable Double | 更新日期: 2023-09-27 18:27:46
我有以下类;
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"列的数据被截断
如何克服这个问题的任何想法。
检查可为null的类型是否具有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注入攻击。
如果你真的想在clss中设置它,你可以修改你的getter和seeter,我认为
public double? MinRate {get;set;}
public string MinRateString
{
get {
if(MinRate!=null)
return MinRate.ToString();
else
return "Null";
}
}
然后在插入时使用MinRateString