簡體   English   中英

SQL Server varchar(max) 和 varchar 不兼容

[英]SQL Server varchar(max) and varchar incompatible

我有一個大問題。。

我正在使用它來進行一項研究,測量地址(通過文本框插入)的距離(緯度和經度),如果距離 < 0.86 ....

此外,我正在使用偏移量來執行分頁。

public static List<Galleria> GetRistorante(int page, string key, string lon)
{
    Galleria Galleria = new Galleria(); 
    string im = string.Empty;

    int items = 10;
    int offset = (page - 1) * items;

    List<Galleria> lst = new List<Galleria>();

    using (SqlConnection sqlConn = new SqlConnection(DB.GetConnectionString()))
    {
        using (SqlCommand sqlComm = new SqlCommand())
        {
            sqlConn.Open();
            sqlComm.Connection = sqlConn;

            sqlComm.CommandText = @"SELECT R.* , C.* FROM dbo.Ristorante R INNER JOIN CategoriaRistorante C ON C.Id = R.CategoriaRistoranteId                                         
            HAVING (SQRT(POWER(69.1 * (R.lat - @key), 2) + POWER(69.1 * (@lon - R.lon) * COS(R.lat / 57.3), 2)) ) < 0.8699197
            ORDER BY R.Id OFFSET @offset ROWS FETCH NEXT @items ROWS ONLY";

            SqlParameter s1 = new SqlParameter();
            s1.SqlDbType = System.Data.SqlDbType.Int;
            s1.ParameterName = "@offset";
            s1.Value = offset;

            sqlComm.Parameters.Add(s1);

            SqlParameter s2 = new SqlParameter();
            s2.SqlDbType = System.Data.SqlDbType.Int;
            s2.ParameterName = "@items";
            s2.Value = items;

            sqlComm.Parameters.Add(s2);

            SqlParameter s3 = new SqlParameter();
            s3.SqlDbType = System.Data.SqlDbType.VarChar;
            s3.ParameterName = "@key";
            s3.Value = string.Format("%{0}%", Convert.ToDouble(key));

            sqlComm.Parameters.Add(s3);

            SqlParameter s4 = new SqlParameter();
            s4.SqlDbType = System.Data.SqlDbType.VarChar;
            s4.ParameterName = "@lon";
            s4.Value = string.Format("%{0}%", Convert.ToDouble(lon));

            sqlComm.Parameters.Add(s4);

            SqlDataReader reader = sqlComm.ExecuteReader();

            while (reader.Read())
            {
                Galleria = new Galleria();
                Galleria.Id = Convert.ToInt32(reader["Id"]);
                Galleria.Nome = reader["Nome"].ToString();
                Galleria.Info = reader["Info"].ToString();
                Galleria.Immagine = reader["Immagine"].ToString();
                Galleria.Telefono = reader["Telefono"].ToString();
                Galleria.Cap = Convert.ToInt32(reader["Cap"]);           
                Galleria.Via = reader["Via"].ToString();
                Galleria.Citta = reader["Citta"].ToString();

                lst.Add(Galleria);
            }

            return lst;
        }
    }
}

現在,當我嘗試此方法時,出現此錯誤:

在此處輸入圖片說明

最初查詢有效,但是當我添加“擁有”時,它給了我這個錯誤。

PS 緯度和經度是數據庫中的varchar(max)

嘗試鑄造它。

HAVING (SQRT(POWER(69.1 * (CAST(R.lat AS DECIMAL(9,6)) - @key), 2) + POWER(69.1 * (@lon - CAST(R.lon AS DECIMAL(9,6))) * COS(CAST(R.lat AS DECIMAL(9,6)) / 57.3), 2)) ) < 0.8699197

但是,正如上面的評論中提到的,我建議使用小數字段本身,因為這種轉換會影響性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM