基于保持事件:Jquery排序,同时更新2个表

时间:2012-08-14 15:16:13

标签: jquery asp.net sql linq

当我排序菜单时:=>保持事件:从鼠标=>排序

菜单:

   Home(1)   News(2)    About(3)    =>    News(2)     Home(1)     About(3)

事件会同时将位置保存到两个表格。

我知道使用Trigger可以解决这个问题。但是两个表的结构不同。所以,我不能使用Trigger。

现在,我想插入/更新将看起来像两个表。

table1:

          Order
           2
           1
           3

表2:

           Order: 213

如何同时更新/插入上述两张表格。

很多

这是对两个表进行更新排序的事件,但它似乎更新为table1

            //-------Update for table: Items---------//
            command.Connection = connection;
            command.CommandText = "UpdateItemsOrder";
            command.CommandType = CommandType.StoredProcedure;
            SqlParameter paramUserName = new SqlParameter("@ItemOrder", SqlDbType.VarChar, 255);
            paramUserName.Value = itemOrder;
            command.Parameters.Add(paramUserName);
            //----Update for table: NewOrders(get data from column ItemOrder)--//
            string username = "aloha";
            DemoDataContext dc = new DemoDataContext();
            var strJoin= (from m in dc.Items
                             select m.ItemOrder);
            var result = string.Join("", strJoin.Select(x => x.Value).ToArray());
            var reUpdateOrder = dc.NewOrders.Single(a => a.UserOrder.Equals(username));
            reUpdateOrder.NewItemOrder = result;
            dc.SubmitChanges();
            connection.Open();
            return (command.ExecuteNonQuery() > 0);

它只插入表:Items,而不是从那时的Items获取数据来更新表:NewOrders。 连接始终打开以进行排序。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

这只是一个猜测,但好像NewOrders可能没有建立主键..?您可以按用户名选择订单,但如果没有主键,LINQ-to-SQL将无法知道在调用dc.SubmitChanges();时如何查找更新记录

此外,您是否有任何特殊原因让您打开SqlConnection进行排序?在某些情况下,这可能会导致线程问题,通常最好由连接池来处理。

SubmitChanges()将打开它自己的连接,因此不需要为它保持SqlConnection打开。您应该单独处理每个更新:

//-------Update for table: Items---------//
using(SqlConnection conn = new SqlConnection(...))
{
    SqlCommand command = new SqlCommand();
    command.Connection = conn;
    command.CommandText = "UpdateItemsOrder";
    command.CommandType = CommandType.StoredProcedure;

    SqlParameter paramUserName = new SqlParameter("@ItemOrder", SqlDbType.VarChar, 255);
    paramUserName.Value = itemOrder;
    command.Parameters.Add(paramUserName);

    conn.Open();
    command.ExecuteNonQuery();
}

//----Update for table: NewOrders(get data from column ItemOrder)--//
string username = "aloha";
DemoDataContext dc = new DemoDataContext();
var strJoin = (from m in dc.Items
               select m.ItemOrder);

var result = string.Join("", strJoin.Select(x => x.Value).ToArray());
var reUpdateOrder = dc.NewOrders.Single(a => a.UserOrder.Equals(username));
reUpdateOrder.NewItemOrder = result;
dc.SubmitChanges();