[英]Sql Reader Loop contains Select that determines which data to insert
Hello I am new to C#/ADO I wrote the following code. 您好,我是C#/ ADO的新手,我编写了以下代码。 I essentially want to open the database and create a reader using a select statement.
我本质上是想打开数据库并使用select语句创建阅读器。 I then want to loop through that reader and grab a column value for use in a second sql statement.
然后,我想遍历该读取器并获取一个列值以在第二个sql语句中使用。 If the ExecuteScaler is not null and I know there is only one record then I want to insert a record into a dataset with the Spindletime as the last parm.
如果ExecuteScaler不为null,并且我知道只有一条记录,那么我想将一条记录插入Spindletime作为最后一个参数的数据集中。 If it is null then I want to insert the same record but with a zero for the last parm.
如果为null,那么我想插入相同的记录,但最后一个参数为零。 I want to do this check and insert for every row in the reader.
我想进行此检查并为阅读器中的每一行插入。 Then close up shop.
然后关闭商店。 Tips on a better way to do this would be helpful.
更好的方法提示将很有帮助。 Can I use dataadapter.fill?
我可以使用dataadapter.fill吗?
here is my code 这是我的代码
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();
You don't need a reader , loop or any dataset. 您不需要reader,loop或任何数据集。 If i understand clear , you can achieve this with a single query like below.
如果我明白clear,则可以通过以下单个查询来实现。 Try and tell me in case you need more help.
尝试告诉我,以防您需要更多帮助。 I should work though.
我应该工作。
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
Assuming OrderName is a relation/Foreign key between OrderResults and MachineResults .IF not then replace it with the relation between the two tables. 假设OrderName是OrderResults和MachineResults之间的关系/外键。如果不是,则不要用两个表之间的关系替换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.