SQL脚本组件c#select语句只读取一次
本文关键字:一次 读取 脚本 组件 c#select 语句 SQL | 更新日期: 2023-09-27 18:19:38
我遇到了一个问题:我成功地建立了与另一个数据库(dwh_fct_overgangen
)的连接,并且我正在使用select命令从另一数据库检索最大值。这在第一排运行得非常好。然而,在选择第二行(包含与第一行不同的值)之后,它不再从其他数据库中选择最大值。
可能是参数只在第一次获得特定值,而这个值在处理新行时从未更改吗?
或者SQL命令可能只执行一次?
有人能解释一下我做错了什么吗
public override void AcquireConnections(object Transaction)
{
base.AcquireConnections(Transaction);
connMgr = this.Connections.ConnectionDWH;
conn = (SqlConnection)connMgr.AcquireConnection(null);
}
public override void PreExecute()
{
base.PreExecute();
}
int volgnrteller = 0;
int materieelbuffer = 0;
int matcheck = 0;
string locatiebuffer = "";
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
cmd = new SqlCommand("select max(volgnr) from dwh_dz.fct_Overgangen where dwh_dz.fct_Overgangen.Mat_nr= @matcheck)", conn);
SqlParam = new SqlParameter("@matcheck", SqlDbType.Int, 4);
SqlParam.Direction = ParameterDirection.InputOutput;
cmd.Parameters.Add(SqlParam);
if (materieelbuffer != Row.Matnr)
{
volgnrteller = 0;
try
{
cmd.Parameters["@matcheck"].Value = Row.Matnr;
sqlReader = cmd.ExecuteReader();
sqlReader.Read();
volgnrteller = sqlReader.GetInt32(0);
sqlReader.Close();
materieelbuffer = Row.Matnr;
}
catch (Exception e)
{
Output0Buffer.AddRow();
volgnrteller++;
materieelbuffer = Row.Matnr;
}
}
else if (locatiebuffer != Row.Locatie)
{
volgnrteller++;
Output0Buffer.Tijduit = Row.TIJD;
Output0Buffer.AddRow();
in_tijdbuffer = Row.TIJD;
locatiebuffer = Row.Locatie;
}
}
不确定我是否只是没有看到它,但看起来这个方法"Input0_ProcessInputRow"不会执行多次。我看不到while语句,也看不到它像你描述的那样被执行了两次。
您是否试图在数据集中选择多行,因为SqlDataReader.GetInt32(0)只会给您第一列的结果。
此外,读者应该处于while循环中,类似于这样。
reader = cmd.ExecuteReader();
while(reader.Read())
{
Q = int.Parse(reader["YourColumnName"]);
txtbx.Text = reader["YourColumnName"].ToString();
}