неверное имя столбца (lat, lat, lng, lat, lat, lng) в запросе sql - PullRequest
0 голосов
/ 17 января 2012
protected void btnFind_Click(object sender, EventArgs e)
{
    if (zipcode.Text != "")
    {
        litAddress.Text = "";
        litAddress1.Text = "";
        string addressstring = zipcode.Text;

        SqlConnection conn1 = new SqlConnection("Data Source=win2008-2;Initial Catalog=h1tm11;User ID=sa;Password=password;Persist Security Info=True;");
        SqlCommand cmd = new SqlCommand("Select lat,lng from tbl_pincode where codes='" + addressstring + "'", conn1);
        DataTable table = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(table);

        foreach (DataRow row in table.Rows)
        {
            string lat = row["lat"].ToString();
            string lng = row["lng"].ToString();

            string connstring = "Data Source=win2008-2;Initial Catalog=h1tm11;User ID=sa;Password=password;Persist Security Info=True;";
            SqlConnection conn = new SqlConnection(connstring);
            string SQL1 = "SELECT  *, 6371.01 * ACOS( SIN( CAST((lat) AS float)*PI()/180 ) * SIN( CAST((store_lat) AS float)*PI()/180 ) + COS( CAST((lat) AS float)*PI()/180 ) * COS( CAST((store_lat) AS float)*PI()/180 ) * COS( (CAST((store_long) AS float)*PI()/180) - (CAST((lng) AS float)*PI()/180) ) ) AS distance from storelocator where 6371.01 * ACOS( SIN(CAST((lat) AS float)*PI()/180 ) * SIN( CAST((store_lat) AS float)*PI()/180 ) + COS(CAST((lat) AS float)*PI()/180 ) * COS( CAST((store_lat) AS float)*PI()/180 ) * COS( (CAST((store_long) AS float)*PI()/180) - (CAST((lng) AS float)*PI()/180) ) ) < '" + ddl_distance.SelectedItem.Value + "' order by distance asc;";
            conn.Open();
            SqlCommand comm = new SqlCommand(SQL1, conn);
            SqlDataReader reader = comm.ExecuteReader();
            while (reader.Read())
            {
                string area = reader["store_name"].ToString();
                string codes = reader["store_address1"].ToString();
                litAddress.Text += area + "<br>";
                litAddress1.Text += codes + "<br>";
            }
        }
    }
}

Я получаю недопустимое имя столбца ошибки lat, lat, lng, lat, lat, lng. Я думаю, что оно не принимает значение lat, lng в запросе sql, но япрохождениеЯ также преобразовал строку в float.Поле данных в моей базе данных nvarchar для lat, lng, store_lat и store_long.Я не знаю почему.

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Вы должны написать SQL-запрос, как,

  string lat = row["lat"].ToString();
  string lng = row["lng"].ToString();
  string SQL1 = "SELECT  *, 6371.01 * CAST("+lat+" AS float)*PI()/180 From YourTable order by distance asc;";
0 голосов
/ 17 января 2012

У перекрестной проверки один раз, все имя столбца.и попробуйте переименовать с хорошим соглашением об именах, чтобы это не привело к ошибке.

это неправильный способ добавления параметра в ваш запрос, это может привести к ошибкам. Эксплойты SqlInjectio, вы должны использовать параметризованный запрос.и также не используйте

SELECT * from table name ,

вы используете сколько столбцов необходимо для отображения вашей логики, это поможет ускорить обработку.

        SqlCommand cmd = new SqlCommand("Select lat,lng from tbl_pincode wherecodes=@address", conn1);
        cmd.Parameters.AddWithValue("@address",  addressstring ); 
        DataTable table = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(table);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...