Запрос SQL Server Где строка имеет двоеточие ':' в нем возвращает не найден - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь запросить таблицу, чтобы найти запись, подобную этой:

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; 

Когда я запускаю запрос, идентификатор равен нулю, потому что читатель не находит ничего.Я попытался запрос без параметра pictureName, и он работает.

Я также проверил таблицу и запись, в которой существует данный запрос на совпадение PictureOwner и PictureName.

Я предполагаю, что у меня возникла проблема с запросом на запись, где параметр содержит двоеточие ':'.Я использую имя файла и текущую дату объединения, чтобы создать имя изображения перед вставкой его в SQL.

Следует ли изменить имя файла, чтобы избежать двоеточия?

РЕДАКТИРОВАТЬ:

Проблема была не в двоеточии ':', а в длине VARCHAR отсутствует в запросе.

1 Ответ

4 голосов
/ 18 апреля 2019

Проблема здесь должна заключаться в том, что вы конвертируете PictureOwner в VARCHAR, который усекает вашу строку.Попробуйте указать соответствующую длину как VARCHAR(255)

...