目前我正在使用WPF和WCF。 WCF处理大部分数据库端并且是服务器,而WPF是我正在使用的客户端。在WCF端,我有:
public void SearchFixedCost_OnClick(object sender, RoutedEventArgs e)
{
TextBox search = _contentGrid.Children.OfType<TextBox>().First();
DataGrid dataGrid = _contentGrid.Children.OfType<DataGrid>().First();
ds = new DataSet();
if (_contentGrid.Children.OfType<RadioButton>().First().IsChecked == true)
{
ds = cln.getAllFixedCostsName(search.Text);
}
else if (search.Text.All(char.IsDigit))
{
ds = cln.getAllFixedCostsExpenses(search.Text);
}
else
{
ds = null;
}
if (ds != null)
{
dataGrid.ItemsSource = ds.Tables["FixedCost"].DefaultView;
dataGrid.Columns[0].Visibility = Visibility.Hidden;
}
}
public void UpdateFixedCost_OnClick(object sender, RoutedEventArgs e)
{
cln.UpdateFixedCosts(ds);
}
在WPF结尾我有:
<div data-role="view" id="divData">
<ul data-role="listview" data-bind="ListofEmployeeData">
<li>
<span data-bind="text:EmpID"></span>
<span data-bind="text:EmpName"></span>
<span data-bind="text:Empemail"></span>
</li>
</ul>
</div>
function EmployeeDetails() {
self.ListofEmployeeData = ko.observableArray([]);
self.getTotalStarRating = function () {
///Mobile DeviceUUId
var Model = {deviceUUID: deviceId};
$.ajax({
type: "POST",
dataType: "json",
data: Model,
url: serverUrl + 'xx/xx/xx',
success: function (data) {
self.ListofEmployeeData($.map(data, function (item) {
return new EmployeeModel(item);
}));
}
});
}
}
function EmployeeModel(item)
{
self.EmpID=ko.observable(item.empId);
self.EmpName=ko.observable(item.EmpName);
self.Empemail=ko.observable(item.Empemail);
}
如果我不搜索任何特定内容,数据将成功更新。例如,如果我加载程序并单击搜索,它将生成该表的所有行,如果我更新其中一行并保存,则不会崩溃,并且更改将被推送到数据库。
如果我搜索特定行,则更改该行并保存。当它到达“adap.Update(ds,”FixedCost“)”时,我将在WCF端崩溃,我得到一个System.ServiceModel.FaultException。只有在我对该行或特定数据行进行更改时才会发生崩溃。
答案 0 :(得分:1)
在wcf端的更新方法中,输入以下代码:
adap.TableMappings.Add("Table", "FixedCost");
在您的getAllFixedCostsName
方法中,您告诉它将数据填充到名为“FixedCost”的表中。在update方法中,您创建了一个新的SqlDataAdapter
,但该适配器对“FixedCost”一无所知。因此,它希望更新数据库中名为“Table”的表。它无法找到它,所以它在抱怨。