SQL Server查询字符串中包含“:”冒号的地方未找到

时间:2019-04-18 15:14:42

标签: c# sql-server special-characters varchar colon

我正在尝试查询表以查找这样的记录:

string owner = "sometextlikethis";
string pictureName = "pexels-photo.jpg_15-Apr-19 07:59:37"; //problem
PictureLibrary _pictureObj = new PictureLibrary();

var connString = db.connStringCompany;
string cmdText = "SELECT ID FROM PictureLibrary WHERE CONVERT(VARCHAR, PictureOwner) =@PictureOwner AND CONVERT(VARCHAR, PictureName) =@PictureName;";

using (var connection = new SqlConnection(connString))
{
    using (var sqlCmd = new SqlCommand(cmdText, connection))
    {
        SqlParameter param1 = new SqlParameter();
        param1.ParameterName = "@PictureOwner";
        param1.Value = owner;
        sqlCmd.Parameters.Add(param1);

        SqlParameter param2 = new SqlParameter();
        param2.ParameterName = "@PictureName";
        param2.Value = pictureName;
        sqlCmd.Parameters.Add(param2);

        connection.Open();

        SqlDataReader dr = sqlCmd.ExecuteReader();

        while (dr.Read()) //record with matching owner is found but if I add pictureName as additional parameter reader does not find anything
        {
            _pictureObj.Id = Convert.ToInt32(dr["ID"]);
        }

        connection.Close();
    }
}

return _pictureObj; 

运行查询时,ID为null,因为读者没有找到任何东西。我尝试了不带pictureName参数的查询,并且该查询有效。

我还检查了表并记录了给定的PictureOwner和PictureName匹配查询存在的地方。

我猜我在查询包含“:”冒号的记录时遇到问题。我正在使用文件名和当前日期串联来创建图像名称,然后再将其插入SQL。

我应该更改文件的名称以避免冒号吗?

编辑:

问题不是冒号':',而是查询中缺少VARCHAR的长度。

1 个答案:

答案 0 :(得分:4)

这里的问题应该是将PictureOwner转换为VARCHAR,这将截断您的字符串。尝试指定相应的长度,例如VARCHAR(255)