-1

我有一个类问题,应该:发出几张发票,显示/更新进度条并将一些值保存到休眠类。下面的代码显示了调用 WyemitujFakture 并显示进度条窗口的函数。

             private void BtOK_Click(object sender, EventArgs e)
              {
                lista.Add(2);
                lista.Add(8);
                liczbaWygenerowach = 0;
                ilosc_zrobionych = 0;
                fpb = new FrmProgressBar("Emisja faktur potwierdzonych, proszę czekać...");
                fpb.Show();
                Application.DoEvents();
                WyemitujFakture(lista);
                fpb.Close();
              }

Windows 窗体显示进度条并生成发票,但无法保存 nHibernate 类的值。它看起来像线条: fs.Save(); 和 Session.Flush(); 不工作。你知道如何解决这个问题吗?

private void WyemitujFakture(List<int> lista)
 {
 foreach (int knh_id in lista)
  {
try
{
    if (luk.Count > 0)
    {
        FakturySprzedazy fs = new FakturySprzedazy();
        fs.FKS_AKCYZA = false;
        fs.FKS_CZY_KLON = false;
        fs.FKS_DATA_DOW_KS = Convert.ToDateTime(MTBDataZapisuDoFK.Text);
        fs.FKS_DATA_FAKTURY = Convert.ToDateTime(MTBDataFaktury.Text);
        fs.FKS_DATA_SPRZEDAZY = Convert.ToDateTime(MTBDataSprzedazy.Text);
        fs.Save();
        Session.Flush();
        liczbaWygenerowach++;
    }

}
catch (Exception ex)
{
    MessageBox.Show("Nie mozna wyemitowac faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message);
}
ilosc_zrobionych++;

fpb.PBStan.Value = (int)((100 * ilosc_zrobionych) / liczbaKontrahentow);
Application.DoEvents();
 }
 }

非常感谢您提前提供帮助

4

1 回答 1

1

亲爱的克雷格·林格,

感谢您的快速反应。我没有收到任何错误消息,并且我有 9,1 版的 postgresql。

我找到了解决方案:)

函数“WyemitujFakture”在线程中,因此它无法访问在主线程中创建的 SessionScope 对象。我在函数 WyemitujFakture 中添加了 4 行:

SessionScope session2 = new SessionScope(FlushAction.Never);
                    fs.Save();
                    session2.Flush();
if (session2 != null) session2.Dispose();

以上4行已解决问题。下面我附上了正常工作的整个功能:

private void WyemitujFakture(List<int> lista)
{
foreach (int knh_id in lista)
{
 try
{
if (luk.Count > 0)
{
    FakturySprzedazy fs = new FakturySprzedazy();
    fs.FKS_AKCYZA = false;
    fs.FKS_CZY_KLON = false;
    fs.FKS_DATA_DOW_KS = Convert.ToDateTime(MTBDataZapisuDoFK.Text);
    fs.FKS_DATA_FAKTURY = Convert.ToDateTime(MTBDataFaktury.Text);
    fs.FKS_DATA_SPRZEDAZY = Convert.ToDateTime(MTBDataSprzedazy.Text);
    SessionScope session2 = new SessionScope(FlushAction.Never);
                    fs.Save();
                    session2.Flush();
   session2.Flush();


   if (session2 != null) session2.Dispose();
   Session.Flush();
    liczbaWygenerowach++;
}

}
catch (Exception ex)
{
MessageBox.Show("Nie mozna wyemitowac faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message);
}
ilosc_zrobionych++;

fpb.PBStan.Value = (int)((100 * ilosc_zrobionych) / liczbaKontrahentow);
Application.DoEvents();
}
}

感谢您的参与!!!!

最好的祝福!!!!

于 2012-09-17T12:32:46.493 回答