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;
          }
}

SQL脚本组件c#select语句只读取一次

不确定我是否只是没有看到它,但看起来这个方法"Input0_ProcessInputRow"不会执行多次。我看不到while语句,也看不到它像你描述的那样被执行了两次。

您是否试图在数据集中选择多行,因为SqlDataReader.GetInt32(0)只会给您第一列的结果。

此外,读者应该处于while循环中,类似于这样。

reader = cmd.ExecuteReader();
while(reader.Read())   
{
    Q = int.Parse(reader["YourColumnName"]);
    txtbx.Text = reader["YourColumnName"].ToString(); 
}