正在設計一個考試系統,需要在考試界面starttest呼叫資料庫里的題目。
這個考試界面是另一個登錄界面student的子表單。

在執行到while(sdr.Read())時就會跳到student中,執行starttest.show()陳述句,隨后界面就卡住執行不了了。
請問是什么原因?是我SqlDataReader使用不對么?
uj5u.com熱心網友回復:
sdr.Read()這個執行后,沒有關閉,再去執行sdrxz1.read()肯定會卡住,因為之前的連接沒有被釋放。uj5u.com熱心網友回復:
private void starttest_Load(object sender, EventArgs e){
name.Text = userinfo.loginname;
num.Text = userinfo.loginnum;
db.conn.Open();
SqlCommand cmd = new SqlCommand("select * from examset", db.conn);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
xzzf = Convert.ToInt32(sdr[1].ToString());
xzdf = Convert.ToInt32(sdr[2].ToString());
pdzf = Convert.ToInt32(sdr[3].ToString());
pddf = Convert.ToInt32(sdr[4].ToString());
tkzf = Convert.ToInt32(sdr[5].ToString());
tkdf = Convert.ToInt32(sdr[6].ToString());
alltime = Convert.ToInt32(sdr[7].ToString());
sdr.Close();
db.conn.Close();
alltimeshow = alltime / 60;
examtime.Text = alltimeshow.ToString();
xznum = xzzf / xzdf;
pdnum = pdzf / pddf;
tknum = tkzf / tkdf;
allquestion1.Text = xznum.ToString();
allquestion2.Text = pdnum.ToString();
allquestion3.Text = tknum.ToString();
xzup.Enabled = false;
tkup.Enabled = false;
pdup.Enabled = false;
//隨機選擇題
Getxz();
//隨機判斷題
Getpd();
//隨機填空題
Gettk();
}
public void Getxz()
{
db.conn.Open();
string sqlxzsl = "select count(*) from question where typeid=1";
SqlCommand cmdxz = new SqlCommand(sqlxzsl, db.conn);
int i = Convert.ToInt32(cmdxz.ExecuteScalar());
db.conn.Close();
if (xznum > i)
{
MessageBox.Show("選擇題數量不足,請聯系老師添加題目后再嘗試答題。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.Close();
}
else
{
studans1 = new string[xznum];
rightan1 = new string[xznum];
for (int a = 0; a < studans1.Length; a++)
{
studans1[a] = "";
}
if (xznum == 0)
{
MessageBox.Show("未抽取題目,請聯系老師調整后再嘗試答題。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
xzup.Enabled = false;
xzdown.Enabled = false;
xz.Enabled = false;
}
else
{
int u = 0;
string one = "select * from question where typeid=1 ";
db.conn.Open();
SqlCommand cmdxz1 = new SqlCommand(one, db.conn);
SqlDataReader sdrxz1 = cmdxz1.ExecuteReader();
while (sdrxz1.Read())
{
a1.Add(sdrxz1[0].ToString());
rightan1[u] = sdrxz1[3].ToString().Trim();
u++;
}
sdrxz1.Close();
string xzdiyiti = "select * from question where id='" + Convert.ToInt32(a1[0]) + "'";
SqlCommand cmdxz2 = new SqlCommand(xzdiyiti, db.conn);
SqlDataReader sdrxz2 = cmdxz2.ExecuteReader();
sdrxz2.Read();
xuanzetimu.Text = sdrxz2[2].ToString();
xuanxiang1.Text = sdrxz2[4].ToString();
xuanxiang2.Text = sdrxz2[5].ToString();
xuanxiang3.Text = sdrxz2[6].ToString();
xuanxiang4.Text = sdrxz2[7].ToString();
sdrxz2.Close();
db.conn.Close();
nowquestion1.Text = 1.ToString();
}
}
}
我的sdr.Close()已經寫了
uj5u.com熱心網友回復:
是不是有例外資訊你漏掉了,你加try catch處理一下,估計是哪里出了例外.轉載請註明出處,本文鏈接:https://www.uj5u.com/net/56865.html
標籤:C#
