0
dateTimePicker2.Value = Convert.ToDateTime((sdr[1]),   
                        CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);

SqlDataReader から日付値を取得していますが、それを読み取るとエラーが発生します。

インデックスが配列の範囲外だった

cmd = new SqlCommand("Physio_cure_Search", con);
cmd.CommandType = CommandType.StoredProcedure;   
cmd.Parameters.Add("@RegisterNo", SqlDbType.VarChar).Value = txtsearch.Text;    
SqlDataReader sdr = cmd.ExecuteReader();    
while (sdr.Read())
{
    txtregistrationno.Text = sdr.GetString(0);
    //giving error on this line:    
    dateTimePicker2.Value = Convert.ToDateTime((sdr[1]), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);        
}

sdrこれは のインスタンスで、 sdr SqlDataReader[1] はデータベース値を取得するために使用されます。これはどのように修正できますか?

ALTER procedure [dbo].[Physio_cure_Search]
@RegisterNo varchar(500)   
As
begin
    select Convert(varchar(100),DateOfBirth,103) as DateOfBirth 
    from Physio_cureTable

    select RegisterNo,RegistrationDate,Stimulation,PationName,DateOfBirth,ContactNo,Occupation,Age,
    Sex,Weight,Chief_Complain,Investigation_Result,PastHistoryAny,Physical_Examination,Ref_By_Doctor,Medications,Prognosis,Electro_Therapy,Neuro_Rehabilitation,Ortho_Rehabilitation,Cardio_Pulmonery_Rehabilitation,Sports_Rehabilitation 

    from Physio_cureTable where RegisterNo=@RegisterNo and Syncoperation <>'D'
end
4

1 に答える 1

0

ストアド プロシージャが 2 つの結果セットを返し、最初の結果セットを操作しているという 2 つの問題があります。次に、C# コードが機能しません。

1-最初の結果セットを削除します: select Convert(varchar(100),DateOfBirth,103) as DateOfBirth from Physio_cureTable. これは、C# コードには役に立ちません。

2-コードを変更して、数値インデックスではなく列名で明示的に値を取得します

 while (sdr.Read())
 {
     txtReg.Text = sdr["RegisterNo"].ToString();
     dateTimePicker2.Value = 
         Convert.ToDateTime(sdr["RegistrationDate"].ToString(),   
                            CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
 } 

3- このストアド プロシージャがこの呼び出しコードによってのみ使用されている場合は、select ステートメントから未使用の列をすべて削除します。

select  RegisterNo, RegistrationDate
from Physio_cureTable where RegisterNo=@RegisterNo and Syncoperation <>'D'
于 2013-03-15T21:12:03.820 に答える