【发布时间】:2014-08-26 15:11:47
【问题描述】:
我有一个问题:我与另一个数据库 (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;
}
}
【问题讨论】:
-
您应该首先检查您的返回值。你打电话给
Read(),但从不检查是否成功。如果你想获得一个标量值,也许ExecuteScalar会比一个成熟的阅读器更容易。 -
我只能说你这里有太多的全局变量在起作用。在这些情况下,他们每个人都可能使您的代码朝着错误的方向发展。这里最好的选择是启动调试器并检查代码流和变量的值
标签: c# sql select query-parameters