[英]Sql Reader Loop contains Select that determines which data to insert
您好,我是C#/ ADO的新手,我编写了以下代码。 我本质上是想打开数据库并使用select语句创建阅读器。 然后,我想遍历该读取器并获取一个列值以在第二个sql语句中使用。 如果ExecuteScaler不为null,并且我知道只有一条记录,那么我想将一条记录插入Spindletime作为最后一个参数的数据集中。 如果为null,那么我想插入相同的记录,但最后一个参数为零。 我想进行此检查并为阅读器中的每一行插入。 然后关闭商店。 更好的方法提示将很有帮助。 我可以使用dataadapter.fill吗?
这是我的代码
conn.Open
using (SqlCommand cmd1 = new SqlCommand("Select Distinct PartName, OrderName, RequiredQuantity, StartDate, CompleteDate, NormalQuantity, ScrapQuantity, OrderComment from OrderResults"))
{
using (SqlDataReader 1streader = cmd1.ExecuteReader())
{
while (1streader.Read())
{
string strordername = reader.GetString(2); get the ordername
using (SqlCommand cmd2 = new SqlCommand("Select OrderName,
Sum(SpindleTime) as TotalSpindle Time from MachineResults
Where @OrderName = strordername"))
{
cmd2.CommmandType = CommandType.Text;
cmd2.Parameters.AddWithValues(“@OrderName”, strordername)
object o = cmd2.ExecuteScalar();
if(o != null) Check if record exists
{
SqlCommand cmd3 = new SqlCommand();
cmd3.Connection = conn;
cmd3.CommandText = "INSERT INTO PartResults(PartName,
OrderName, RequiredQuantity, StartDate, CompleteDate,
NormalQuantity, ScrapQuantity, OrderComment,
SpindleTime)
VALUES
(@param1, @param2, @param3, @param4, @param5, @param6,
@param7, @param8, @param9)";
cmd3.Parameters.AddWithValue("@param1",
reader.GetString(1));
cmd3.Parameters.AddWithValue("@param2",
reader.GetString(2));
cmd3.Parameters.AddWithValue("@param3",
reader.GetString(3));
cmd3.Parameters.AddWithValue("@param4",
reader.GetString(4));
cmd3.Parameters.AddWithValue("@param5",
reader.GetString(5));
cmd3.Parameters.AddWithValue("@param6",
reader.GetString(6));
cmd3.Parameters.AddWithValue("@param7",
reader.GetString(7));
cmd3.Parameters.AddWithValue("@param8",
reader.GetString(8));
cmd3.Parameters.AddWithValue("@param9", TotalSpindle));
cmd3.ExecuteNonQuery();
}
else
{
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = conn;
cmd4.CommandText = "INSERT INTO PartResults(PartName,
OrderName, RequiredQuantity, StartDate, CompleteDate,
NormalQuantity, ScrapQuantity, OrderComment,
SpindleTime)
VALUES
(@param1, @param2, @param3, @param4, @param5, @param6,
@param7, @param8, @param9)";
cmd4.Parameters.AddWithValue("@param1",
reader.GetString(1));
cmd4.Parameters.AddWithValue("@param2",
reader.GetString(2));
cmd4.Parameters.AddWithValue("@param3",
reader.GetString(3));
cmd4.Parameters.AddWithValue("@param4",
reader.GetString(4));
cmd4.Parameters.AddWithValue("@param5",
reader.GetString(5));
cmd4.Parameters.AddWithValue("@param6",
reader.GetString(6));
cmd.Parameters.AddWithValue("@param7",
reader.GetString(7));
cmd4.Parameters.AddWithValue("@param8",
reader.GetString(8));
cmd4.Parameters.AddWithValue("@param9", 0));
cmd4.ExecuteNonQuery();
}
}
}
}
1streader.Close();
}
}
conn.Close();
您不需要reader,loop或任何数据集。 如果我明白clear,则可以通过以下单个查询来实现。 尝试告诉我,以防您需要更多帮助。 我应该工作。
INSERT INTO PartResults(PartName,
OrderName, RequiredQuantity, StartDate, CompleteDate,
NormalQuantity, ScrapQuantity, OrderComment,
SpindleTime)
VALUES
Select Distinct PartName, OrderName,
RequiredQuantity, StartDate, CompleteDate,
NormalQuantity, ScrapQuantity, OrderComment,
(SELECT
CASE WHEN Sum(SpindleTime) > 0
THEN Sum(SpindleTime)
ELSE 0 END AS TotalSpindle
FROM MachineResults
WHERE OrderName =OrderResults.OrderName )
from OrderResults
假设OrderName是OrderResults和MachineResults之间的关系/外键。如果不是,则不要用两个表之间的关系替换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.