在else语句之前退出数据读取器 [英] Exit out of data reader before else statement

查看:49
本文介绍了在else语句之前退出数据读取器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在if语句之后找到一种破解datareader的方法,这样我就可以在else语句中执行insert查询。请告知是否有办法达到同样的目的?谢谢。

I would like to find a way to break the datareader after the if statement so that I can execute the insert query in else statement. Please advise if there is a way to achieve the same? Thanks.

我收到dr仍然打开的错误,因此无法执行以下查询。

I am getting the error that dr is still open and hence cannot perform the below query.

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();
        }
    }




推荐答案

您需要在调用insertcmd.ExecuteNonQuery之前关闭DataReader。
You need to close the DataReader prior to calling insertcmd.ExecuteNonQuery.


这篇关于在else语句之前退出数据读取器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆