【发布时间】:2011-10-17 02:36:03
【问题描述】:
在下面的程序中,我将从 MBRHISTDETL 中选择的每条记录写入数据表。但是,每当从 MBRHISTDTL 文件中读取记录时,我想在将其写入数据表之前执行更多操作。但是,程序的编写方式是,当我只想写入特定记录时,它会将整个结果集写入数据表。我怎样才能改变这个?我想做的是:
- 从 MBRHISTDETL 中选择一条记录
- 是 BILLTYPE 09 并且是 BILLMOYR 9999?如果是,请继续。如果没有,请再获取一条记录。
- 使用来自 MBRHISTDETL 的 MBRNUM 从 LOCINFODETL 获取 LOCATION、DISTRICT 和 CYCLE。
- DISTRICT 和 CYCLE 是否与输入参数 cbDistrict 和 cbCycle 匹配?如果没有,请获取另一条记录。
- 填充数据表
- 除非文件结束,否则返回 1。
由于我的代码是现在编写的,我只能完成第 1 步到第 3 步,因为我还没有找到从 MBRHISTDETL 中获取记录并使用该信息从 LOCINDODETL 中选择另一条记录来验证我拥有的记录的方法在写入数据表之前是正确的。基本上,我试图从两个不同的数据库文件中获取信息并将信息写入数据表。我这样做的方式是否正确?
到目前为止,这是我的代码:
private void btnGo_Click(object sender, EventArgs e)
{
//get parameters
string cycle = cbCycle.Text;
string district = cbDistrict.Text;
//create a connection to the database
OdbcConnection DbConnection = new OdbcConnection("DSN=UPN2;uid=xxxx;pwd=xxxx");
DbConnection.Open();
//create a command to extract the required data and
//assign it to the connection string
OdbcCommand DbCommand = DbConnection.CreateCommand();
DbCommand.CommandText = "SELECT * FROM CAV_MBRHISTDETL WHERE BILLTYPE = '09' " +
"AND BILLMOYR <> '9999'";
//Create a DataAdapter to run the command and fill the datatable
OdbcDataAdapter da = new OdbcDataAdapter();
da.SelectCommand = DbCommand;
DataTable dt = new DataTable();
//Put results into datatable.
da.Fill(dt);
tbOutput.Text = PrintDataTable(dt);
DbCommand.Dispose();
DbConnection.Close();
}
【问题讨论】:
-
我想我可以像我目前正在做的那样将初始结果集写入数据表,然后遍历该数据表并从 LOCINFODETL 文件中选择更多信息并将其写入另一个数据表。然后我可以组合来自两个数据表的信息并根据需要输出。不过好像有点“脏”。我认为应该有一种方法可以对结果集采取行动,而不必先将其存储在数据表中。不过,为了做到这一点,我认为程序必须一次处理一条记录。嗯。
标签: c# sql datatable resultset