系统环境:windows XP+2P3+.net 2005
后台数据库(另外一台电脑):Sql 2000
程序在下面的循环中出现错误
foreach (DataRowView drv in changeOrderMateriDetail.DefaultView)
{
this.progressBar1.Value += 1;
this.setControlText(this.lblNumber, this.progressBar1.Value + "/" + this.progressBar1.Maximum);
string tmpOrder = drv["指令號"].ToString().Trim();
string tmpMaterial = drv["料號"].ToString().Trim();
string tmpFilterSQL = " 指令號='" + tmpOrder + "' and 料號='" + tmpMaterial + "'";
order = tmpOrder;
material = tmpMaterial;
//1.查询指令号和料號的數量和總金額
Int32 tmpQty = 0;
decimal tmpMoney = 0;
DataRow dr = this.myDataSet.Tables["V_" + dbfName + "_Sum"].Rows.Find(new object[] { drv["指令號"], drv["料號"] });
if (dr != null)
{
tmpQty = Convert.ToInt32(dr[updateSqlField_Total]);
if (updateSqlField_Money != "")
tmpMoney = Convert.ToDecimal(dr[updateSqlField_Money]);
}
//2.查詢后台SQL中是否有數據
string sqlCommand = "select count(*) as cnt from " + updateSqlTable + " where " + tmpFilterSQL;
object tmp = ChenYueJun.DataAccessLibrary.SqlDataAccess.ExecuteSingle(sqlCommand);
//if(tmpOrder=="資材倉" && tmpMaterial=="ZC01ITIF001" || this.progressBar1.Value==63)
//{
// string t=tmpMaterial;
//}
if (updateSqlField_Money != "")
{
if (Convert.ToInt16(tmp) == 0)
sqlCommandArray.Add("insert into " + updateSqlTable + "(指令號,料號," + updateSqlField_Total + "," + updateSqlField_Money + ",異動日期) values('" + tmpOrder + "','" + tmpMaterial + "'," + tmpQty + "," + tmpMoney + ",'" + changeDate.ToString("yyyy-MM-dd") + "')");
else
sqlCommandArray.Add("update " + updateSqlTable + " set " + updateSqlField_Total + "=" + tmpQty + "," + updateSqlField_Money + "=" + tmpMoney + ",異動日期='" + changeDate.ToString("yyyy-MM-dd") + "' where " + tmpFilterSQL);
}
else
{
if (Convert.ToInt16(tmp) == 0)
sqlCommandArray.Add("insert into " + updateSqlTable + "(指令號,料號," + updateSqlField_Total + ",異動日期) values('" + tmpOrder + "','" + tmpMaterial + "'," + tmpQty + ",'" + changeDate.ToString("yyyy-MM-dd") + "')");
else
sqlCommandArray.Add("update " + updateSqlTable + " set " + updateSqlField_Total + "=" + tmpQty + ",異動日期='" + changeDate.ToString("yyyy-MM-dd") + "' where " + tmpFilterSQL);
}
}
错误信息:
CLR 在過去 60 秒一直無法從 COM 內容 0x1a4ff8 轉換為 COM 內容 0x1a5168。擁有該目的內容/Apartment 的執行緒,很可能正在進行非提取等候或正在處理非常長的執行作業,而未提取 Windows 訊息。這種情況通常會對效能產生負面影響,甚至可能導致應用程式停止回應,或導致記憶體使用量持續隨時間而累積。若要避免這個問題,所有單一執行緒的 Apartment (STA) 執行緒都應該使用提取等候基本方法 (例如 CoWaitForMultipleHandles),並且在長時間的執行作業中定期提取訊息。说明:1.不知道哪行出错,是在运行这个循环时,突然弹出此错误信息,无法点击代码页.
2.循环中所用的自定义方法不存在问题.
后台数据库(另外一台电脑):Sql 2000
程序在下面的循环中出现错误
foreach (DataRowView drv in changeOrderMateriDetail.DefaultView)
{
this.progressBar1.Value += 1;
this.setControlText(this.lblNumber, this.progressBar1.Value + "/" + this.progressBar1.Maximum);
string tmpOrder = drv["指令號"].ToString().Trim();
string tmpMaterial = drv["料號"].ToString().Trim();
string tmpFilterSQL = " 指令號='" + tmpOrder + "' and 料號='" + tmpMaterial + "'";
order = tmpOrder;
material = tmpMaterial;
//1.查询指令号和料號的數量和總金額
Int32 tmpQty = 0;
decimal tmpMoney = 0;
DataRow dr = this.myDataSet.Tables["V_" + dbfName + "_Sum"].Rows.Find(new object[] { drv["指令號"], drv["料號"] });
if (dr != null)
{
tmpQty = Convert.ToInt32(dr[updateSqlField_Total]);
if (updateSqlField_Money != "")
tmpMoney = Convert.ToDecimal(dr[updateSqlField_Money]);
}
//2.查詢后台SQL中是否有數據
string sqlCommand = "select count(*) as cnt from " + updateSqlTable + " where " + tmpFilterSQL;
object tmp = ChenYueJun.DataAccessLibrary.SqlDataAccess.ExecuteSingle(sqlCommand);
//if(tmpOrder=="資材倉" && tmpMaterial=="ZC01ITIF001" || this.progressBar1.Value==63)
//{
// string t=tmpMaterial;
//}
if (updateSqlField_Money != "")
{
if (Convert.ToInt16(tmp) == 0)
sqlCommandArray.Add("insert into " + updateSqlTable + "(指令號,料號," + updateSqlField_Total + "," + updateSqlField_Money + ",異動日期) values('" + tmpOrder + "','" + tmpMaterial + "'," + tmpQty + "," + tmpMoney + ",'" + changeDate.ToString("yyyy-MM-dd") + "')");
else
sqlCommandArray.Add("update " + updateSqlTable + " set " + updateSqlField_Total + "=" + tmpQty + "," + updateSqlField_Money + "=" + tmpMoney + ",異動日期='" + changeDate.ToString("yyyy-MM-dd") + "' where " + tmpFilterSQL);
}
else
{
if (Convert.ToInt16(tmp) == 0)
sqlCommandArray.Add("insert into " + updateSqlTable + "(指令號,料號," + updateSqlField_Total + ",異動日期) values('" + tmpOrder + "','" + tmpMaterial + "'," + tmpQty + ",'" + changeDate.ToString("yyyy-MM-dd") + "')");
else
sqlCommandArray.Add("update " + updateSqlTable + " set " + updateSqlField_Total + "=" + tmpQty + ",異動日期='" + changeDate.ToString("yyyy-MM-dd") + "' where " + tmpFilterSQL);
}
}
错误信息:
CLR 在過去 60 秒一直無法從 COM 內容 0x1a4ff8 轉換為 COM 內容 0x1a5168。擁有該目的內容/Apartment 的執行緒,很可能正在進行非提取等候或正在處理非常長的執行作業,而未提取 Windows 訊息。這種情況通常會對效能產生負面影響,甚至可能導致應用程式停止回應,或導致記憶體使用量持續隨時間而累積。若要避免這個問題,所有單一執行緒的 Apartment (STA) 執行緒都應該使用提取等候基本方法 (例如 CoWaitForMultipleHandles),並且在長時間的執行作業中定期提取訊息。说明:1.不知道哪行出错,是在运行这个循环时,突然弹出此错误信息,无法点击代码页.
2.循环中所用的自定义方法不存在问题.
今天早上我编译程序后直接运行程序,却又没有出现错误.但调试时,却又出现此错误.