Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Executereader和ExecuteNon query在ado.net中的单个连接中执行_C#_Sql Server 2008_Ado.net_Connection String_Sqldatareader - Fatal编程技术网

C# Executereader和ExecuteNon query在ado.net中的单个连接中执行

C# Executereader和ExecuteNon query在ado.net中的单个连接中执行,c#,sql-server-2008,ado.net,connection-string,sqldatareader,C#,Sql Server 2008,Ado.net,Connection String,Sqldatareader,下面的代码段在同一连接字符串中使用多个查询。首先,我从数据库中选择一些数据,然后在关闭datareader(dr)之前,我想做一些验证,如果满足,我将在dr的while循环中将这些值插入数据库中的表中。在那里,我得到了错误,因为已经有一个打开的datareader,所以在关闭它之前我不能使用另一个查询。因此,我临时使用了指向同一数据库的另一个连接字符串,并使用该连接对象(conn1)执行insert qry。但是wat是另一种不使用其他连接字符串的方法。 任何帮助都将不胜感激。Thx publi

下面的代码段在同一连接字符串中使用多个查询。首先,我从数据库中选择一些数据,然后在关闭datareader(dr)之前,我想做一些验证,如果满足,我将在dr的while循环中将这些值插入数据库中的表中。在那里,我得到了错误,因为已经有一个打开的datareader,所以在关闭它之前我不能使用另一个查询。因此,我临时使用了指向同一数据库的另一个连接字符串,并使用该连接对象(conn1)执行insert qry。但是wat是另一种不使用其他连接字符串的方法。 任何帮助都将不胜感激。Thx

public XmlDocument LBS_Offer_Scheduler(string dev_token, float lat, float llong)
    {
        XmlDocument xml_doc = null;
        bool result = false;
        int row_affect = 0;
        int x = (int)Math.Truncate(lat);
        int y = (int)Math.Truncate(llong);

        string qry = "select Store_id,Store_Latitude,Store_Longitude from tbl_FB_Store_Details where Store_Latitude like '"
            + x + "%' and Store_Longitude like '" + y + "%'";
        conn.Open();
        cmd = new SqlCommand(qry, conn);
        dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            Store_Id = dr[0].ToString();
            str_dlat = dr[1].ToString();
            str_dlon = dr[2].ToString();
            double dlat = Convert.ToDouble(str_dlat);
            double dlon = Convert.ToDouble(str_dlon);
            dist_in_sqmts = obj_distance.distance(lat, llong, dlat, dlon);
            id = Convert.ToInt32(Store_Id);
            if (dist_in_sqmts < 200.00)
            {
                string insert_qry = "insert into tbl_FB_Offer_PushNote values('" + dev_token + "', "+ id + ",'" + DateTime.Now + "','N')";
                conn1.Open();
                cmd = new SqlCommand(insert_qry, conn1);
                row_affect = cmd.ExecuteNonQuery();
                conn1.Close();
            }
        }
        conn.Close();
        if (row_affect > 0)
            result = true;
        xml_doc = x_doc.result(result);
        return xml_doc;
    }
public-XmlDocument-LBS\u-Offer\u调度程序(string-dev\u-token、float-lat、float-llong)
{
XmlDocument xml_doc=null;
布尔结果=假;
int row_impact=0;
int x=(int)数学截断(lat);
int y=(int)Math.Truncate(llong);
string qry=“从tbl\U FB\U Store\U详细信息中选择Store\U id、Store\U纬度、Store\U经度,其中Store\U LATIONE like'”
+x+“%”并将_经度存储为“+y+”%”;
conn.Open();
cmd=新的SqlCommand(qry,conn);
dr=cmd.ExecuteReader();
while(dr.Read())
{
Store_Id=dr[0]。ToString();
str_dlat=dr[1].ToString();
str_dlon=dr[2].ToString();
double dlat=Convert.ToDouble(str_dlat);
double dlon=Convert.ToDouble(str_dlon);
距离(lat、llong、dlat、dlon);
id=转换为32(存储id);
如果(距离平方米<200.00)
{
string insert_qry=“insert into tbl_FB_Offer_PushNote值(“+dev_token+”,“+id+”,“+DateTime.Now+”,“N”);
conn1.Open();
cmd=新的SqlCommand(插入命令,conn1);
行\u impact=cmd.ExecuteNonQuery();
conn1.Close();
}
}
康涅狄格州关闭();
如果(行影响>0)
结果=真;
xml_doc=x_doc.result(结果);
返回xml\u文档;
}

您必须使用
DataSet
class-
SqlDataAdapter
DataTable
从数据库检索结果

string qry = "select Store_id,Store_Latitude,Store_Longitude
      from tbl_FB_Store_Details where Store_Latitude 
            like @x and Store_Longitude like @y";
SqlCommand cmd=new SqlCommand(qry,conn);
cmd.Parameters.AddWithValue("@x", x + "%");
cmd.Parameters.AddWithValue("@y", y + "%");

SqlDataAdapter adp=new SqlDataAdapter(cmd);
DataTable dt=new DataTable();
adp.Fill(dt);

foreach(DataRow dr in dt.Rows)
 {
     Store_Id = dr[0].ToString();
     str_dlat = dr[1].ToString();
     str_dlon = dr[2].ToString();
     double dlat = Convert.ToDouble(str_dlat);
     double dlon = Convert.ToDouble(str_dlon);
     dist_in_sqmts = obj_distance.distance(lat, llong, dlat, dlon);
     id = Convert.ToInt32(Store_Id);
     if (dist_in_sqmts < 200.00)
      {
           .....
       }
 }
string qry=“选择门店id、门店纬度、门店经度
来自tbl\U FB\U门店的详细信息门店所在地
像@x一样存储经度像@y”;
SqlCommand cmd=新的SqlCommand(qry,conn);
cmd.Parameters.AddWithValue(“@x”,x+“%”);
cmd.Parameters.AddWithValue(“@y”,y+“%”);
SqlDataAdapter adp=新的SqlDataAdapter(cmd);
DataTable dt=新的DataTable();
自动进料(dt);
foreach(数据行dr在dt.行中)
{
Store_Id=dr[0]。ToString();
str_dlat=dr[1].ToString();
str_dlon=dr[2].ToString();
double dlat=Convert.ToDouble(str_dlat);
double dlon=Convert.ToDouble(str_dlon);
距离(lat、llong、dlat、dlon);
id=转换为32(存储id);
如果(距离平方米<200.00)
{
.....
}
}

您需要在连接字符串中设置MultipleActiveResultSets=True。
请参见

good insight。这不能在datareader中完成吗?cos使用datatable和dataset使得编码不那么令人信服。MultipleActiveResultSets让我的工作轻松多了。但这会减缓进程吗?我猜!在CLR过程中使用“context connection=true”时,不能使用MARS: