请耐心等待我,我真的想尽可能地缩小它。
我创建了一个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;
";