分類:[データベース全般]
2013/02/20(Wed) 16:24:49 編集(投稿者)
OS: Windows7
言語: VisualStudio2010 C#
Oracle10gで開発しています。
private void button6_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
try
{
using (OracleConnection con = new OracleConnection())
{
con.ConnectionString = MKST.UID;
con.Open();
using (OracleCommand cmd = con.CreateCommand())
{
cmd.CommandText = "select * from AM80 ORDER BY 手形区分 ASC,期日 ASC,番号 ASC";
using (OracleDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
DGVOJ[0] = CVR.CVS(dr[0]);
DGVOJ[1] = CVR.CVS(dr[1]);
DGVOJ[2] = CVR.CVS(dr[3]);
dataGridView1.Rows.Add(DGVOJ);
}
}
}
}
}
catch (OracleException OEX) { MessageBox.Show(OEX.Message); }
catch (Exception EX) { MessageBox.Show(EX.Message); }
MessageBox.Show("検索完了");
}
のようにしてdataGridView1に全テーブルデータを表示させていたのですが件数が多くて時間がかかり一定時間操作がないというエラーで止まってしまうので
public static string DBF(string DBName, string KYN, object[] KY_OJ, string UD, Object[] XJ)
{
try
{
using (OracleConnection con = new OracleConnection())
{
con.ConnectionString = MKST.UID;
con.Open();
Object[] OJ = new Object[XJ.Length];
using (OracleCommand cmd = con.CreateCommand())
{
if (KY_OJ[0] == null) { cmd.CommandText = "select * from " + DBName + " ORDER BY " + DB_String.Order_Make(DBName, KYN, UD); }
else
{
cmd.CommandText = "select * from " + DBName + " where " + DB_String.Key_Make(DBName, KYN, KY_OJ) + " ORDER BY "
+ DB_String.Order_Make(DBName, KYN, UD);
}
using (OracleDataReader dr = cmd.ExecuteReader())
{
dr.Read();
for (int CT1 = 0; CT1 < XJ.Length; CT1++)
{
OJ[CT1] = dr[CT1];
}
Array.Copy(OJ, XJ, XJ.Length);
}
}
con.Clone();
con.Dispose();
}
return null;
}
catch (OracleException OEX)
{ return OEX.Message; }
catch (Exception EX)
{ return EX.Message; }
}
public static string DBN(string DBName, string KYN, string UD, object[] HOJ)
{
int K_Ban = 0;
string RD = null;
for (int CT1 = 0; CT1 < 10; CT1++)
{
if (MKST.KYS[CT1] == KYN) { K_Ban = CT1 + 10; break; }
}
string[] K_Koumoku = MKST.KYS[K_Ban].Split(',');
int Sindo = K_Koumoku.Length;
for (int CT2 = Sindo; CT2 > 0; CT2--)
{
RD = NextSerch(DBName, KYN, HOJ, UD, CT2);
if (RD == null) { break; }
}
return RD;
}
public static string NextSerch(string DBName, string KYN, object[] HOJ, string UD,int Sindo)
{
try
{
using (OracleConnection con = new OracleConnection())
{
con.ConnectionString = MKST.UID;
con.Open();
Object[] OJ = new Object[HOJ.Length];
using (OracleCommand cmd = con.CreateCommand())
{
cmd.CommandText = "select * from " + DBName + " where " + DB_String.Key_Make3(DBName, KYN, UD, HOJ, Sindo) + " ORDER BY "
+ DB_String.Order_Make(DBName, KYN, UD);
//MessageBox.Show(SSS);
using (OracleDataReader dr = cmd.ExecuteReader())
{
dr.Read();
MessageBox.Show(Henkan.CVL(dr[3]).ToString());
for (int CT1 = 0; CT1 < HOJ.Length; CT1++)
{
OJ[CT1] = dr[CT1];
}
Array.Copy(OJ, HOJ, HOJ.Length);
}
}
con.Clone();
con.Dispose();
}
return null;
}
catch (OracleException OEX) { return OEX.Message; }
catch (Exception EX) { return EX.Message; }
}
の3つを作り
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
KOJ = new object[1];
RD = DB_CTR.DBF("AM80", "AM81", KOJ, "u", MKST.AM80OLD);
FG1 = 1;
while (true)
{
if (RD == null) { OJSet(MKST.AM80OLD); } else { break; }
if (FG1 > 50) { break; }
RD = DB_CTR.DBN("AM80", "AM81", "u", MKST.AM80OLD);
FG1++;
}
}
というようにしてデータを読んだのですが46個データを読んだ後、public static string NextSerch(string DBName, string KYN, object[] HOJ, string UD,int Sindo)
のdr.Read();の値が次のデータに変わらなくなってしまい、47個目以後のデータを読まなくなってしまいました。
46個目まではちゃんと次のデータを読んでいるのに47個目から読まなくなるのか原因が解らなく困っています。
このような症状を解決したことがある方いらっしゃいましたら回避方法を教えていただきたくよろしくお願いいたします。
追記接続には11gのODP.NETを使っています。 サーバーはwindows2000server +Oracle10g クライアントはwin7です。