SQL Serverでクエリをテストしましたが、C#では機能しません。エラーメッセージは、クエリによって返される変数の格納メカニズムを示していますが、問題はおそらくクエリ自体であると考えています。
Delphiには、クエリステートメント(ステートメント)をデバッグする方法がありますshowMessage
。
例えば:-
DMS.ADOQuery1.SQL.Clear;
DMS.ADOQuery1.SQL.Add('select FIRSTNM, LASTNM, STREET, STREET2, CITY, STATE, ZIP, MEMBERKEY, MEMBID, BIRTH' +
' from MEMBER' +
' where MEMBID = ''' + Mem_ID + ''''
);
showmessage(DMS.ADOQuery1.SQL[0]);
C#で同様のことを行う方法はありますか?誰かが見て、SQLクエリがASP.netでは機能しないがSQL Serverでは機能する理由を教えてもらえますか?
// initialize
string [] HPCODE = new string[20] ;
string [] OPFROMDT = new string [20] ;
string [] OPTHRUDT = new string [20] ;
// Second SQL Query to find out eligibility information about the requested Member. //
SqlConnection Connection1 = new SqlConnection(DBConnect.SqlServerConnection);
String strSQL1 = "SELECT MEMBER, HPCODE, convert(varchar, OPFROMDT, 101) as OPFROMDT, convert(varchar, OPTHRUDT, 101) as OPTHRUDT FROM [main].[dbo].[MEMBER] INNER JOIN [main].[dbo].[MEMBHP] ON MEMBER.MEMBERKEY = MEMBHP.MEMBERKEY and opthrudt >= opfromdt INNER JOIN [main].[dbo].[HPCONTRACT] ON MEMBHP.HPCODEKEY = HPCONTRACT.HPCODEKEY INNER JOIN [main].[dbo].[LOB] ON HPCONTRACT.LOB_KEY = LOB.LOB_KEY where MembID = @memID";
SqlCommand command1 = new SqlCommand(strSQL1, Connection1);
//command1.Parameters.AddWithValue("@memID", memID);
// SQL reader variable is set.
SqlDataReader Dr1;
// Connection is explicitly opened.
Connection1.Open();
// Reader is executed.
Dr1 = command1.ExecuteReader();
int i = 0;
while (Dr1.Read())
{
// if (memID == Dr["MEMBID"].ToString() )
// {
// store subID in the Global variable called ID.
HPCODE[i] = (Dr1["HPCODE"].ToString()).TrimEnd();
OPFROMDT[i] = (Dr1["OPFROMDT"].ToString()).TrimEnd();
OPTHRUDT[i] = (Dr1["OPTHRUDT"].ToString()).TrimEnd();
i = i + 1;
// }
}
// Reader variable must always be explicitly closed to prevent memory leaks.
Dr1.Close();
エラー:
範囲外のインデックスユーザーコードで処理されない例外:= HPCODe
注:-
Parameters.AddwithValue
コードの前の部分で事前定義されているため、コメントはありません。解決策がそんなに簡単だったら、私はそれを自分で直したでしょう。*