我有这个功能:
public void Change_Reservation(string pDataAreaId, string pSalesId, string pCustNum, string pNom, SqlConnection Conn)
{
try
{
ADV_CdeRAVCollection myColl = new ADV_CdeRAVCollection();
using (SqlCommand Com = Conn.CreateCommand())
{
Com.CommandText = ADV_CdeRAV._SQL_Select_If_Reserve;
Com.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
using (SqlDataReader rs = Com.ExecuteReader())
{
while (rs.Read())
{
ADV_CdeRAV myObj = new ADV_CdeRAV();
myObj.AddFromRecordSet_SelectRAV(rs);
if (myObj.Nom == null)
{
res = "null to nom";
}
else if (myObj.Nom.Trim() == pNom)
{
res = "nom to null";
}
myColl.Add(myObj);
}
Com.Dispose();
rs.Close();
rs.Dispose();
}
}
if (res == "nom to null")
{
//UPDATE NOM TO NULL
using (SqlCommand Com2 = Conn.CreateCommand())
{
Com2.CommandText = ADV_CdeRAV._SQL_Update_Nom_To_Null;
Com2.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
Com2.ExecuteReader();
Com2.Dispose();
}
}
else if (res == "null to nom")
{
//UPDATE NULL TO NOM
using (SqlCommand Com3 = Conn.CreateCommand())
{
Com3.CommandText = ADV_CdeRAV._SQL_Update_Null_To_Nom;
Com3.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
Com3.ExecuteReader();
Com3.Dispose();
}
}
if (myColl.Count == 0)
{
//INSERT
using (SqlCommand Com4 = Conn.CreateCommand())
{
Com4.CommandText = ADV_CdeRAV._SQL_Insert_Reservation;
Com4.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
Com4.ExecuteReader();
Com4.Dispose();
}
}
}
catch (System.Exception)
{
throw;
}
}
但我也遇到了这个错误:
"已经有一个与此命令关联的开放式数据加载器"。
但我的代码(rs)中的DataReader用于"使用"阻止所以它不能保持打开状态。 我使用"使用"块,将MARS设置为true等等。但是我无法解决这个问题而且我是C#/ ASP.NET的新手。
答案 0 :(得分:2)
让我们试一试。如果你使用ExecuteNonQuery而不是ExecuteReader进行插入和更新怎么样? 请用**查看下面的代码。
请让我知道结果。
public void Change_Reservation(string pDataAreaId, string pSalesId, string pCustNum, string pNom, SqlConnection Conn)
{
try
{
ADV_CdeRAVCollection myColl = new ADV_CdeRAVCollection();
using (SqlCommand Com = Conn.CreateCommand())
{
Com.CommandText = ADV_CdeRAV._SQL_Select_If_Reserve;
Com.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
using (SqlDataReader rs = Com.ExecuteReader())
{
while (rs.Read())
{
ADV_CdeRAV myObj = new ADV_CdeRAV();
myObj.AddFromRecordSet_SelectRAV(rs);
if (myObj.Nom == null)
{
res = "null to nom";
}
else if (myObj.Nom.Trim() == pNom)
{
res = "nom to null";
}
myColl.Add(myObj);
}
Com.Dispose();
rs.Close();
rs.Dispose();
}
}
if (res == "nom to null")
{
//UPDATE NOM TO NULL
using (SqlCommand Com2 = Conn.CreateCommand())
{
Com2.CommandText = ADV_CdeRAV._SQL_Update_Nom_To_Null;
Com2.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
**Com2.ExecuteNonQuery();**
Com2.Dispose();
}
}
else if (res == "null to nom")
{
//UPDATE NULL TO NOM
using (SqlCommand Com3 = Conn.CreateCommand())
{
Com3.CommandText = ADV_CdeRAV._SQL_Update_Null_To_Nom;
Com3.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
**Com3.ExecuteNonQuery();**
Com3.Dispose();
}
}
if (myColl.Count == 0)
{
//INSERT
using (SqlCommand Com4 = Conn.CreateCommand())
{
Com4.CommandText = ADV_CdeRAV._SQL_Insert_Reservation;
Com4.Parameters.AddWithValue("@DataAreaId", pDataAreaId);
**Com4.ExecuteNonQuery();**
Com4.Dispose();
}
}
}
catch (System.Exception)
{
throw;
}
}