名字'在当前上下文中不存在

本文关键字:上下文 不存在 名字 | 更新日期: 2023-09-27 17:49:48

我已经尝试了几个小时来处理这个问题。这是我的代码。

为了节省一些空间,我需要缩短代码。似乎在我的插入中,我看不到select语句中包含的flat变量。我如何使用这个变量,以便我可以插入它。

谢谢。

SOME CODE HERE............... 
string tlocquery = "SELECT LAC,CID,LONG,LAT,STREET,MUNICIPAL FROM TRIANGULATION WHERE lat LIKE " + "'%" + tlatcut.ToString() + "%' AND long LIKE '%" + tlongcut.ToString() + "%'";
                SqlCommand commandtloc = new SqlCommand(tlocquery, cnn);
                SqlDataReader sdrtloc = commandtloc.ExecuteReader();
                while (sdrtloc.Read())
                {
                    string Tlong = sdrtloc["LONG"].ToString();
                    txtbxTlong.Text = Tlong.ToString();
                    string Tlat = sdrtloc["LAT"].ToString();
                    txtbxTlat.Text = Tlat.ToString();
                    string Lac = sdrtloc["LAC"].ToString();
                    txtbxLac.Text = Lac.ToString();
                    string Cid = sdrtloc["CID"].ToString();
                    txtbxCid.Text = Cid.ToString();
                    string Street = sdrtloc["STREET"].ToString();
                    string Municipal = sdrtloc["MUNICIPAL"].ToString();
                    txtbxTloc.Text = Street.ToString() + "," + Municipal.ToString();
                }
  SOME CODE HERE............... 
  string insertquery = "INSERT INTO TBLCURRENT (TLONG,TLAT) VALUES ('" + Tlong + "','" + Tlat + "')";
                SqlCommand insertcomm = new SqlCommand(insertquery, cnn);
                SqlDataReader insertreader = insertcomm.ExecuteReader();

名字'在当前上下文中不存在

while循环中声明的每个变量在循环的本地。换句话说,在循环结束后,它将不再存在。

你需要在循环外声明和初始化你的字符串:

string Tlat = String.Empty;
while(...)
{
    //Do stuff with Tlat
} 

然后继续循环填充变量

问题是你的Tlat变量是在while循环中声明的。

你有两种可能:

  1. 限制在循环中使用flat变量
  2. 将Tlat声明放在while循环之前。

在循环中声明字符串变量Tlat。所以它不存在于外部,你不能在循环之后访问它:

string insertquery = "INSERT INTO TBLCURRENT (TLONG,TLAT) VALUES ('" + Tlong + "','" + Tlat + "')";

所以在循环前声明:

string Tlat = null;
while (sdrtloc.Read())
{
    // ...
    Tlat = Tlat.ToString();
}

现在您可以在之后访问它。

但是如果你期望只有一条记录,为什么要使用循环呢?你可以这样写:

if (sdrtloc.HasRows)
{
    sdrtloc.Read();
    string Tlat = sdrtloc["LAT"].ToString();
    // ....
    string insertquery = "INSERT INTO TBLCURRENT (TLONG,TLAT) VALUES ('" + Tlong + "','" + Tlat + "')";
}
除此之外,永远不要使用字符串连接来构建sql查询。使用sql参数可以防止sql注入和其他问题。

您的问题是作用域之一:因为您在while循环中声明了flat,因此它将不存在于while循环之外。因此,您需要在进入while循环之前声明flat,然后在循环中修改它,之后您就可以访问它了—只需注意,它将只携带上次Read操作的数据。