0

我有以下课程;

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

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

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 的值可以为空,这是在类中处理的。但是对于 MySQL INSERT 语句,我需要以某种方式将值设置为 null,因为我收到了错误

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

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

4

2 回答 2

0

检查您的可为空类型是否具有 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 注入攻击。

于 2013-08-14T19:55:35.217 回答
0

如果你真的想在 clss 中设置它,你可以像我想的那样修改你的 getter 和 seeter

 public double? MinRate {get;set;}

  public string MinRateString  
   {
         get {
                if(MinRate!=null)
                   return MinRate.ToString();
                 else
                   return "Null";
            }
   }

然后在插入时使用 MinRateString

于 2013-08-14T20:14:10.657 回答