1

ORM として LinqToSql を使用しています。次のコードを含むフォームがあります。

public partial class frmBarcodeList : Form
{

    private ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings["myconn"];
    private DatabaseContext _context; 

    public frmBarcodeList()
        {
            _context = new DatabaseContext(connectionString.ConnectionString);
            InitializeComponent();               
        }    
}

ボタン ハンドラーで I call をクリックしますGetInfoFromDataBase。これは問題の方法です:

private List<TicketInfo> GetInfoFromDataBase()
        {
            try
            {
                var oids = GetSelectedEvents();

                List<Order> orders = new List<Order>();
                List<TicketInfo> data = new List<TicketInfo>();
                foreach (var oid in oids)
                {
                    orders.AddRange(_context.Orders.Where(o => o.ScheduleId == oid && o.IsPayed.Value).ToList());
                }

                foreach (var order in orders)
                {
                    foreach (var detail in order.OrderDetails) ***line 158**
                    {
                        var checkSum = CalculateChecksum(detail.BarCode);
                        TicketInfo info = new TicketInfo();
                        info.Firstname = order.SiteUser.FirstName;
                        info.LastName = order.SiteUser.LastName;
                        info.Email = order.SiteUser.Email;
                        info.Phone = order.SiteUser.PhoneNumber;
                        info.Barcode = string.Format("{0}{1}", detail.BarCode, checkSum);
                        info.FileName = RemoveInvalidFilePathCharacters(string.Format("{0}_{1}", order.EventSchedule.BaseEvent.Name,
                                                                                      order.EventSchedule.RecurrenceStart), "");
                        data.Add(info);
                    }
                }
                return data;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message + "\n" + e.StackTrace);
            }

            return null;
        }

エラーが発生します:

---------------------------

---------------------------
Specified cast is not valid.
   at System.Data.SqlClient.SqlBuffer.get_Int32()

   at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)

   at Read_OrderDetail(ObjectMaterializer`1 )

   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()

   at System.Data.Linq.EntitySet`1.Load()

   at System.Data.Linq.EntitySet`1.GetEnumerator()

   at DT.KazBilet2.BarcodeChecker.frmBarcodeList.GetInfoFromDataBase() in C:\Users\Макс\Documents\Visual Studio 2010\Projects\DT.KazBilet2\branches\NewDesk\DT.KazBilet2.BarcodeChecker\frmBarcodeList.cs:line 158
---------------------------
ОК   
---------------------------

なぜこのエラーが発生するのですか?
ありがとう。

4

1 に答える 1

1

Linq2SQL を使用する場合の SqlClient メソッド内の型キャスト エラーは、(ほとんど) 常にモデル エラーが原因です。

モデルがデータベースと一致していること、特にモデルの int フィールド (get_Int32 でエラーが発生) がデータベースの実際の整数フィールドに対応していることを確認します。

于 2012-08-08T08:34:03.410 に答える