静态DataSet表内容丢失问题`

yifan102 2007-01-11 10:21:15
我在一个类中定义一个静态datset对象
然后在一个主窗体的load事件中加载数据库中的两个表,
调用子窗体
可在子窗体中使用表时程序出错说表中的行为空,请问哪位大侠知道为什么?
...全文
284 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiatong1981 2007-01-11
  • 打赏
  • 举报
回复
你看看子窗体调用DS时
DS里面的表名称就知道了 呵呵
jiatong1981 2007-01-11
  • 打赏
  • 举报
回复
呵呵 写错了一点 手写的 没测试

try
{
this._mConn.ConnectionString = ConStrr;
string _sqlstrr = "select * from PsnInfo";
this._mDa = new SqlDataAdapter(_sqlstrr,this._mConn);
this._mDa.Fill(dbclass.DS,"PersonInfo");
}
catch(SqlException ex)
{
MessageBox.Show(ex.Message);
}
jiatong1981 2007-01-11
  • 打赏
  • 举报
回复
例如:

public class Form1 : System.Windows.Forms.Form
{
……
private void InitControlInfo()
{
try
{
this._mConn.ConnectionString = ConStrr;
string _sqlstrr = "select * from PsnInfo";
this._mDa = new SqlDataAdapter(_sqlstrr,this._mConn);
this._mDa.Fill(dbclass.DS,"PersonInfo");
_ds = _mDs.Copy();
}
catch(SqlException ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
}
}
public class dbclass
{
public static DataSet DS = new DataSet();
}


…………


public class Form2 : System.Windows.Forms.Form
{
…………
private void Form2_Load(object sender, System.EventArgs e)
{
this.dataGrid1.DataSource = dbclass.DS.Tables[0];
}

}


yifan102 2007-01-11
  • 打赏
  • 举报
回复
其中dataSet是在另一个类中定义的静态变量
yifan102 2007-01-11
  • 打赏
  • 举报
回复
DataTable selectTable = new DataTable("select_test");
DataTable judgeTable = new DataTable("judge_test");
SqlConnection conn = new SqlConnection(TestSettingValue.connection);
SqlDataAdapter adapter = new SqlDataAdapter("select * from testSetting", conn);
conn.Open();
adapter.Fill(TestResult.datSet, "testSetting");
adapter.SelectCommand = new SqlCommand("select top " + TestSettingValue.choiceNum + " number,content,keya,keyb,keyc,keyd,answer from select_test ORDER BY NEWID()", conn);
adapter.Fill(selectTable);
adapter.SelectCommand = new SqlCommand("select top " + TestSettingValue.judgeNum + " number, content, answer from judge_test ORDER BY NEWID()", conn);
adapter.Fill(judgeTable);
TestResult.datSet.Tables.Add(selectTable);
TestResult.datSet.Tables.Add(judgeTable);
if (TestResult.datSet.Tables["select_test"].Rows.Count != TestSettingValue.choiceNum)
{
MessageBox.Show("数据填充不完整!");
return;
}
conn.Close();
上面这一段是在MdiForm父窗体中执行加载表到datset,正确加载了
可在调用子窗体时出错
下面是子窗体加载时判断dataset中表内容时总说表为0
private void ChoiceForm_Load(object sender, EventArgs e)
{
if (TestResult.datSet.Tables["select_test"].Rows.Count == 0)
{
MessageBox.Show("数据填充不完整!");
return;
}
this.manage = this.BindingContext[TestResult.datSet, "select_test"];
this.Check();
table =TestResult.datSet.Tables["select_test"];
this.CoiceRightAnswer();
this.DataBindControls();
}
jiatong1981 2007-01-11
  • 打赏
  • 举报
回复
问代码

yifan102 2007-01-11
  • 打赏
  • 举报
回复
我用的dataset.Tables["select_test"].Rows[i]["columeName"]来访问的
可程序说表中的第一行就已经空了
在填充dataset时,我作了测试,表不为空,但在子窗体使用表时就空了
rola 2007-01-11
  • 打赏
  • 举报
回复
调用的是不是一张表
yifan102 2007-01-11
  • 打赏
  • 举报
回复
找到原因了,还是自己太马虎了,忘记给试题参数设置值了,结果默认值都为0,所以返回行为0.
同样谢谢你了
whb147 2007-01-11
  • 打赏
  • 举报
回复
怀疑在别的地方修改了数据了
jiatong1981 2007-01-11
  • 打赏
  • 举报
回复
那就要查查别的代码了 因为你的ds是个static 其它地方也可能已经改变了他的值

直接在项目中搜索该DS 看看到底是哪里改变了它
yifan102 2007-01-11
  • 打赏
  • 举报
回复
不是的,表在,但数据为空,不知在哪里丢失了
不是数据填错表了
jiatong1981 2007-01-11
  • 打赏
  • 举报
回复
我感觉是你把数据填错表了 表都在 但是数据不对哦

仔细看看吧
yifan102 2007-01-11
  • 打赏
  • 举报
回复
还是不行,我用下面语句遍历表,所有的表都存在,但就是都是空表
foreach (DataTable dt in TestResult.datSet.Tables)
MessageBox.Show(dt.TableName);
我在别的窗体调用表绑定数据就可以,为什么就在这个窗体不行了,实在郁闷呀
这种情况太邪门了
谢谢你了,我再仔细找找原因吧

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧