尝试在表

时间:2018-01-30 20:43:44

标签: c# mysql wpf mvvm datagrid

请耐心等待我,我真的想尽可能地缩小它。

我创建了一个WPF窗口,它根据从数据库中选择的表创建数据网格。我这样做是通过设置窗口的datacontext,然后将datagrid的ItemSource绑定到该上下文中的表(OrdersViewModel)。

ReceiveOrderDialogWindow.xaml.cs

    this.DataContext = new OrdersViewModel("Orders");

ReceiveOrderDialogWindow.xaml

        <DataGrid x:Name="datatable" 
                  ItemsSource="{Binding SubVwr.Tables[0].Tbl}"
                  AutoGeneratingColumn="OnAutoGeneratingColumn"
                  AutoGenerateColumns="True"
                  CanUserAddRows="False" 
                  CanUserDeleteRows="False"/>

然后,一旦用户确认他们的选择,我就通过ICommand从OrdersViewModel内部调用我的更新功能。

    Db.UpdateTable(SubVwr.Tables[0].UpdateTableQuery, SubVwr.Tables[0].Tbl);

这是一个更新现有行的工作,除了我不能添加任何新行。

UpdateTable方法

public void UpdateTable(TableQuery query, DataTable tbl)
{
    if (query.Qry != "")
    {
        if (IsConnOpen)
        {
            try
            {
                UpdateCmd.Parameters.Clear();
                UpdateCmd.CommandText = query.Qry;
                for (int i = 0; i < query.Prms.Count; i++)
                {
                    UpdateCmd.Parameters.Add(new MySqlParameter());
                    UpdateCmd.Parameters[i].ParameterName = "@" + query.Prms[i].Col;
                    UpdateCmd.Parameters[i].SourceColumn = query.Prms[i].Col;
                }
                DA.Update(tbl);
            }
            catch (MySqlException ex)
            {
                Msg = "Error: " + ex.Number + " " + ex.Message + " from Qry = " + query.Qry;
            }
            catch (Exception ex)
            {
                Msg = "Error: " + ex + " " + ex.Message;
            }
        }
        else
        {
            Msg = "Not Connected";
        }
    }

我已经对这个错误的来源和潜在的解决方案进行了一些研究。

我知道我应该按照以下方式实施:

MySqlCommandBuilder cmdBldr = new MySqlCommandBuilder(DA);
DA.UpdateCommand = cmdBldr.GetInsertCommand();

但问题是多个基表不支持动态SQL生成。

请求的信息

query.Qry如下:

        UpdateTableQuery.Qry = @"
UPDATE
`n2000`.`lines`
SET 
`olID` = @olID,
`QtyPer` = @QtyPer,
`QtyRcvd` = @QtyRcvd,
`DateRcvd` = @DateRcvd,
`pid` = @pid,
`PricePer` = @PricePer,
`ItemETA` = @ItemETA,
`Note` = @Note,
`Rev` = @Rev
WHERE `olID` = @olID;
";

Error message I receive. printed to console

0 个答案:

没有答案