1

当我对菜单进行排序时:=> 保留事件:从鼠标排序 =>

菜单:

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

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

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

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

表格1:

          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);

它只插入表:项目,而不是从项目中获取数据以更新表:新订单。连接始终打开以进行排序。

请帮我。

4

1 回答 1

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();
于 2012-08-14T17:36:14.873 回答