我想在wcf web服务中更新我的数据库表。但我得到了2个错误。首先,我无法将字符串更改为日期时间。我发送了" 1/1/1991"但我得到了错误。其次,我无法更新我的表格。我该如何解决?
myentities db = new myentities();
public bool EditPerson(int uid,string _name,string bdate,string adr,string cty,string email,string tel,string pass)
{
DateTime myDate = DateTime.ParseExact(bdate, "yyyy-MM-dd",null); //Error
var person = db.Person.FirstOrDefault(x => x.pID == uid);
if (person != null)
{
Person pt = new Person();
pt.pName = _name;
pt.birthDate = myDate;
pt.adress = adr;
pt.city = cty;
pt.email = email;
pt.tel = int.Parse(tel);
db.Entry(person).CurrentValues.SetValues(pt);
db.SaveChanges(); //Error
return true;
}
return false;
}
错误:由于内部错误,客户端无法处理请求。
Server stack trace:
location: System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
location: System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
location: System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
location: System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
location: System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
location: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
location: System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
location: IService.EditPerson(Int32 uid, String _name, String bdate, String adr, String cty, String email, String tel, String pass)
location: ServiceClient.EditPerson(Int32 uid, String _name, String bdate, String adr, String cty, String email, String tel, String pass)
答案 0 :(得分:2)
将指定的日期和时间字符串表示形式转换为它 DateTime等效使用指定的格式和特定于文化 格式信息。 字符串表示的格式必须匹配 完全符合指定的格式。
在你的情况下,他们不是。如果您的字符串为1/1/1991
,那么您需要使用d/M/yyyy
(我假设第一个是日)格式。
您可能需要使用InvariantCulture
,因为/
custom format specifier具有的特殊含义,将我替换为当前的文化日期分隔符。当您将null用作IFormatProvider
时,此方法会使用您的CurrentCulture
。如果您当前的文化广告热线/
为DateSeperator
,则可以使用null
。
DateTime myDate = DateTime.ParseExact(bdate, "d/M/yyyy",
CultureInfo.InvariantCulture);
我无法对您的更新错误发表任何意见,因为我对实体框架的了解太多。