在我的程序中,我正在将从MBRHISTDETL中选择的每条记录写入数据表。但是,每当从MBRHISTDTL文件中读取记录时,我都希望在将其写入数据表之前执行更多操作。但是,编写程序的方式是,当我只想写特定的记录时,它会将整个结果集写入数据表。我怎么能改变这个?我想做的是:
由于我的代码现在正在编写,我只能完成第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();
}
答案 0 :(得分:2)
如果MBRNUM是LOCINFODETL中的外键,那么您只需要来自MBRHISDETL的所需MRBNUM。尝试一个子选择:
SELECT MBRNUM, LOCATION, DISTRICT, CYCLE
from
CAV_LOCINFODETL
WHERE
MBRNUM IN (SELECT MBRNUM
FROM CAV_MBRHISTDETL
WHERE BILLTYPE = '09' AND BILLMOYR <> '9999')
答案 1 :(得分:1)
如果表位于同一个数据库中,您可能(根据数据库后端和配置)可以使用内部联接在单个查询中获取所有数据。例如:
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.MBRNUM替换为LOCINFO。(LOCINFODETL中的任何字段对应MBRNUM)。)
如果SQL查询语法不清楚,您可能需要参考inner joins,parameterized queries和table aliasing以获取有关语法的更多信息。
答案 2 :(得分:0)
基本上,我正在尝试从两个不同的数据库中获取信息 文件并将信息写入数据表
我假设数据库表在同一个数据库中。我会在查询语句中使用union来将两个表链接到一个公用键。有很多关于如何创建关系的例子。