このコードは、Windows Server 2008 R2およびSQL Server 2008 R2 ExpressのIIS.7でASP.NETを実行します。SQL Server 2008の.NET例外
これは、3つのパラメータに基づいてデータベースから選択し、選択した行を含むオブジェクトを返す単純な関数です。
このコードはほとんどの時間で正常に実行されますが、データベーステーブルの列名であるserial_number
という例外が発生することがあります。
これは完全な例外である:
[IndexOutOfRangeException:SERIAL_NUMBER]
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(文字列フィールド名)2674398
System.Data.SqlClient.SqlDataReader.GetOrdinal(文字列名)249
System.Data.SqlClient.SqlDataReader.get_Item(文字列名)23
PhoneSerialNumber.GetByPhoneNumber(文字列にphoneNumber、文字の国、String型のアプリ)423
UpdateMeClass.GenereteVersこの例では、System.Web.CallHandlerExecutionStep.System.Web(System.Web.CallHandlerExecutionStep.System.Web)を使用して、System.Web.CallHandlerExecutionStep.System.Web(System.Web.CallHandlerExecutionStep.System.Web)のUpdateMe.ProcessRequest(HttpContextコンテキスト)をSystem.Web.CallHandlerExecutionStep.System.Web .HttpApplication.IExecutionStep.Execute() +599
System.Web.HttpApplication.ExecuteStep(IExecutionStepステップ、ブール& completedSynchronously)171
Iは、例外の場合の3つのパラメータを記録し、それらはあるが同じサーバー内の同じパラメーターを使用して同じ要求をシミュレートすると、正常に実行されることに注意してください。
例外の場合、クエリは正常に実行されますが、この例外を介して列の値を取得すると、間違っている可能性があります。
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["meConnectionString"].ConnectionString);
connection.Open();
SqlCommand cmd;
using (connection)
{
cmd = new SqlCommand("select * from serialnumber_table join countries on country_id=countryid join applications on ApplicationID=App_ID where phone_number= @phoneNumber and [email protected] and [email protected]", connection);
cmd.Parameters.AddWithValue("@phoneNumber", phoneNumber);
cmd.Parameters.AddWithValue("@Country", Country);
cmd.Parameters.AddWithValue("@app", app);
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
sn = new PhoneSerialNumber();
sn.SerialNumber = rdr["serial_number"].ToString();
sn.PhoneNumber = rdr["phone_Number"].ToString();
sn.PhoneLang = rdr["Lang"].ToString();
sn.PhoneModel = rdr["ModelName"].ToString();
sn.ApplicationVersion = rdr["App_Version"].ToString();
sn.DealerCode = rdr["dealer_code"].ToString();
sn.Size = rdr["size"].ToString();
TimeSpan Time = DateTime.Parse(rdr["Renewal_Date"].ToString()) - new DateTime(1970, 1, 1, 0, 0, 0);
sn._renewal_Date = (long)(Time.TotalMilliseconds);
rdr.Dispose();
connection.Dispose();
return sn;
}
}
sn = new PhoneSerialNumber();
sn.SerialNumber = null;
sn.PhoneNumber = null;
sn.PhoneModel = null;
sn.PhoneLang = null;
sn.ApplicationVersion = null;
sn.DealerCode = null;
connection.Dispose();
return sn;
}
ある? –
なしあり例外は 'Serial_Number'と呼ばれていますので、実際にどのような例外が発生しますか? –
DBに対してこのクエリを実行し、読み込んでいるデータがnullでないことを確認してください。rdr [" serial_number "] – ShelbyZ