根据条件将一个表复制到另一个表
本文关键字:一个 复制 另一个 条件 | 更新日期: 2023-09-27 18:04:10
在下面的程序中,我将从MBRHISTDETL中选择的每个记录写入到一个数据表中。但是,每当从MBRHISTDTL文件中读取一条记录时,我希望在将其写入数据表之前执行更多操作。但是,程序的编写方式是,当我只想写入特定记录时,它将把整个结果集写入数据表。我怎样才能改变这一点?我想做的是:
- 从MBRHISTDETL 中选择一条记录
- 是BILLTYPE 09还是BILLMOYR <> 9999?是,继续。如果没有,重新记录。
- 使用MBRHISTDETL中的MBRNUM从LOCINFODETL中获取LOCATION, DISTRICT和CYCLE。
- DISTRICT和CYCLE是否匹配输入参数cbDistrict和cbCycle?如果没有,重新记录
- 填充datatable
- 返回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();
}
如果MBRNUM是LOCINFODETL中的外键,那么您只需要从MBRHISDETL中获取所需的mrbrnum。尝试子选择:
SELECT MBRNUM, LOCATION, DISTRICT, CYCLE
from
CAV_LOCINFODETL
WHERE
MBRNUM IN (SELECT MBRNUM
FROM CAV_MBRHISTDETL
WHERE BILLTYPE = '09' AND BILLMOYR <> '9999')
如果表在同一个数据库中,您可能(取决于数据库后端和配置)可以使用内部连接在单个查询中获取所有数据。例如:
DbCommand.CommandText =
@"SELECT HIST.Field1, HIST.Field2, LOCINFO.Field3 FROM CAV_MBRHISTDEL AS HIST
INNER JOIN LOCINFODETL AS LOCINFO ON HIST.MBRNUM = LOCINFO.MBRNUM
WHERE LOCINFO.CYCLE = @CYCLE AND
LOCINFO.DISTRICT = @DISTRICT AND
HIST.BILLTYPE = '09' AND
HIST.BOLLMOYR <> '9999'";
DbCommand.Parameters.AddWithValue("@CYCLE", cycle);
DbCommand.Parameters.AddWithValue("@DISTRICT", district);
这就完成了步骤1、2、3、4和6,这些步骤都与选择所需的数据有关。步骤5只需要执行命令来填充数据表。(注意:将Field1、Field2等替换为数据表和LOCINFO所需的实际字段。带LOCINFO的MBRNUM。(以LOCINFODETL中对应MBRNUM的字段为准)
如果SQL查询语法不清楚,您可能需要引用内部连接、参数化查询和表别名来获取更多语法信息。
基本上,我正试图从两个不同的数据库中获取信息文件并将信息写入数据表
我假设数据库表在同一个数据库中。我会在查询语句中使用联合将两个表链接到一个公共键。关于如何建立这种关系,有很多例子。