将双精度列表作为字符串发送到数据库

时间:2013-03-22 00:35:10

标签: c#

与下面的代码相混淆。

我的课程如下

public class Counter
{       
    public Double NormalCounter { get; set; }
    public Double SATCounter { get; set; }
    public Double SUNCounter { get; set; }

}

在我的主要课程中我有办法做一些计算来填补计数器

Counter CountHrs = GetBookedHours(resourceBkg, PrevEvent);
var lstExpResult = new List<string> {CountHrs.NormalCounter.ToString(),
                                     CountHrs.SATCounter.ToString(), 
                                     CountHrs.SUNCounter.ToString()};
UpdateBooking(bookingSesid, lstExpResult);

假设我在计数器中有如下的值

  

NormalCounter = 4

     

SATCounter = 10

     

SUNCounter = 6

我正在尝试添加到字符串列表并更新数据库。这是正确的方法吗?或者我有任何其他选择。

我的更新预订方法如下所示。

 public static bool UpdateBooking(string BookingSesid,List<string>HoursByRate)
    {
         SchedwinEntities db = new SchedwinEntities();
         string value = string.Empty;
         for (int i = 0; i < 5; i++)
         {
             string str = " ";
             if (i < HoursByRate.Count())
             {
                 str = HoursByRate[i];
                 value += str + ((char)13).ToString() + ((char)10).ToString();
             }
         }
            var query = 
            from SEVTs in db.SEVTs
            where
            SEVTs.SESID.Trim() == BookingSesid//SESID
            select SEVTs;
        foreach (var SEVTs in query)
        {
            SEVTs.USER3 = value;//value
        }
        try
        {
            db.SaveChanges();
            return true;
        }
        catch (UpdateException ex)
        {
            return false;
        }
    }

2 个答案:

答案 0 :(得分:3)

您应该传递键值对列表,从它们构造参数化语句,并使用键值对列表来绑定参数,而不是传递表示double的字符串列表。价值观,如下:

class SqlParamBinding {
    string Name {get;set;}
    object Value {get;set;} 
}
var lstExpResult = new List<SqlParamBinding> {
    new SqlParamBinding { Name = "NormalCounter", Value = CountHrs.NormalCounter}
,   new SqlParamBinding { Name = "SATCounter", Value = CountHrs.SATCounter}
,   new SqlParamBinding { Name = "SUNCounter", Value = CountHrs.SUNCounter}
};
UpdateBooking(bookingSesid, lstExpResult);

现在lstExpResult将名称与值分开,您的UpdateBooking代码可以将SQL表达式格式化为

WHERE NormalCounter=@NormalCounter AND SATCounter=@SATCounter AND ...

然后将@NormalCounter@SATCounter@SUNCounter绑定到lstExpResult列表中传递的值。

答案 1 :(得分:0)

如果要进入Counter类列表,则使用List而不是List。看起来您可能有大量可能正在更新或发送到数据库的Counter对象。

    Counter c = new Counter();
    c. NormalCounter = 4
    c.SATCounter = 10
    c.SunCounter = 10

    List<Counter> listCounter = new List<Counter>
    listCounter.Add(c);

代码更易于维护和阅读。

如果您一次发送一个对象,则根本不需要列表。您可以将计数器对象传递给UpdateMethod,并在更新数据库时对其进行解析。