我想找到一種方法,在if語句之後退出datareader,以便我可以在else語句中執行插入查詢。有沒有辦法做到這一點?在else之前退出datareader之前,在if-else語句中
我收到dr仍然打開的錯誤,因此無法執行下面的查詢。
sVendorDetails.VendorID = insertcmd.ExecuteNonQuery();
下面是代碼:
public class VendorDetails
{
int _VendorID;
string _VendorName;
public int VendorID
{
set { _VendorID = value; }
get { return _VendorID; }
}
public string VendorName
{
set { _VendorName = value; }
get { return _VendorName; }
}
}
public VendorDetails VendorCheck(string sVendorName)
{
SqlCommand cmd = new SqlCommand("dbo.usp_GetVendorByVendorName", myConnection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@VendorName", SqlDbType.VarChar));
cmd.Parameters["@VendorName"].Value = sVendorName;
VendorDetails sVendorDetails = null;
try
{
myConnection.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
sVendorDetails = new VendorDetails();
sVendorDetails.VendorID = ((int)dr["VendorID"]);
sVendorDetails.VendorName = ((string)dr["VendorName"]).ToUpper().Trim();
}
}
else if (dr.HasRows!= true)
{
ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('VendorName:" + sVendorName + " not found. Inserting Vendor details into Vendor and Invoice table.')", true);
SqlCommand insertcmd = new SqlCommand("dbo.InsertVendorName", myConnection);
insertcmd.CommandType = CommandType.StoredProcedure;
insertcmd.Parameters.Add(new SqlParameter("@VendorName", SqlDbType.VarChar));
insertcmd.Parameters["@VendorName"].Value = sVendorName;
sVendorDetails = new VendorDetails();
sVendorDetails.VendorID = insertcmd.ExecuteNonQuery();
sVendorDetails.VendorName = sVendorName;
}
dr.Close();
return sVendorDetails;
}
catch (SqlException err)
{
throw new ApplicationException("DB usp_GetVendorByVendorName Error: " + err.Message);
}
finally
{
myConnection.Close();
}
}
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close%28v=vs.110 %29.aspx?f = 255&MSPPError = -2147217396 –
這就是爲什麼您應該始終使用['using'](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement)語句。 –
'if(dr.HasRows){} else if(dr.HasRows!= true){}'第二個if塊沒有意義。 'if(dr.HasRows){} else {}'完成同樣的事情。 – Flater