首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WP7 SQL转换为datetime时发生溢出

WP7 SQL转换为datetime时发生溢出
EN

Stack Overflow用户
提问于 2011-10-15 03:56:28
回答 2查看 3.7K关注 0票数 0

我的问题似乎与this帖子和this帖子相同,但似乎都不适用于我的情况。

我有一个定义如下的实体(修改为仅显示列和定义):

代码语言:javascript
复制
public partial class Payee
{
    [Column(Storage = "_PayeeId", IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false)]
    public int PayeeId { get; set; }

    [Column(Storage = "_PayeeName", DbType = "NVarChar(20)", CanBeNull = false)]
    public string PayeeName { get; set; }

    [Column(Storage = "_Active")]
    public System.Nullable<bool> Active

    [Column(IsVersion = true)]
    private Binary _version;

    [Association(Storage = "_Transactions", ThisKey = "PayeeId", OtherKey = "PayeeId")]
    public EntitySet<Transaction> Transactions { get; set; }
}

App.xaml.cs中,当应用程序最初启动时,我将一些示例数据加载到数据库中:

代码语言:javascript
复制
Payee pay1 = new Payee { PayeeName = "My Bank" };
App.ViewModel.SavePayee(pay1);

SavePayee方法如下:

代码语言:javascript
复制
public void SavePayee(Payee payee)
{
    Datacontext.Payees.InsertOnSubmit(payee);
    Datacontext.SubmitChanges();
}

当我创建从App.xaml.cs调用的“样本数据”时,它工作得很好。现在,当我稍后尝试在应用程序中创建一个新的收款人时(txtPayee.Text确实有一个值):

代码语言:javascript
复制
Payee payee = txtPayee.SelectedItem as Payee;
if (payee == null)
{
    payee = new Payee { PayeeName = txtPayee.Text };
    App.ViewModel.SavePayee(payee);
}

我收到了错误:An overflow occurred while converting to datetime.

导致此错误的原因可能是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-16 12:17:19

事实证明,在这种情况下,错误消息是正确的。下面是我是如何发现错误的。希望它能在未来帮助其他人:

我的实体被插入时没有问题,实际上,错误消息是正确的。我怎么知道是怎么回事?我用下面的代码包装了save方法的内容:

代码语言:javascript
复制
System.IO.IsolatedStorage.IsolatedStorageFile iso = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication(); 
using (checkbookDB.Log = new System.IO.StreamWriter(iso.CreateFile("log.txt"))) 
{ 
}

因此,当该方法出现错误时,它会将结果写出到文本文件中。收到错误消息后,我使用WP7 SDK附带的IsolatedStorageExplorerTool从仿真器下载了该文件。我在文本文件中找到了什么?

代码语言:javascript
复制
-- CURSOR BASED INSERT [Payees] 
-- [PayeeName] <= [test payee] 
-- [Active] <= [] 

-- AUTOSYNC [_version] <= [System.Byte[]] 
-- AUTOSYNC [PayeeId] <= [13] 
-- CURSOR BASED INSERT [Transactions] 
-- [TransDate] <= [1/1/0001 12:00:00 AM]
-- [TransAmount] <= [0] 
-- [TransType] <= [0] 
-- [RefNum] <= [] 
-- [Memo] <= [] 
-- [PayeeId] <= [0] 
-- [CategoryId] <= [] 
-- [AccountId] <= [1] 
-- [Cleared] <= [False] 

像我的收款方这样的Hmm....Ok...Looks正在正确插入,我甚至有了一个新的PayeeId。但是wait...Transaction呢?为什么会有事务尝试插入?

我是MVVM的新手。在过去的一个半月里,我一直在非工作时间使用它,所以我对最佳实践并不熟悉。在我的ViewModel上,我创建了一个名为account的公共实体。我使用此变量来跟踪应用程序中选定的帐户,以便到处显示正确的数据。在我试图从其中保存新收款人的页面中,当创建页面时,我创建了一个事务实体的实例,以将数据映射到屏幕上的控件,或者从屏幕上的控件映射数据。在我的OnNavigatedTo方法中,我所做的是设置

代码语言:javascript
复制
transaction.Account = App.ViewModel.account 

因此,当我要保存事务时,我知道要将其保存到哪个帐户。实际上(我认为),这是在告诉我的数据上下文:嘿!我有一个事务实体,我正在通过向它添加一个帐户来更改它。因此,当我进入datacontext.SaveChanges方法时,它试图保存一个空的、空白的事务实体。

为什么这条线在OnNavigatedTo中排得很高?我没有把握。我将它移到了Save方法中,这是它的归属。

/doh

票数 1
EN

Stack Overflow用户

发布于 2011-11-14 04:58:47

在我的例子中,我试图插入一个未初始化的"System.DateTime“,而我的数据库字段不能为空。据我所知,从您的日志中,TransDate是System.DateTime.MinValue。即使是在可以为空的datetime上,它也会产生溢出错误。您必须将其设置为null,以便驱动程序将其转换为System.DBNull.Value。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7772877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档