C# Получить правильную строку filpath для SQL оператора обновления - PullRequest
0 голосов
/ 19 апреля 2020

Я создал небольшое приложение WinForms (. Net 4.8, SQL Сервер 18). Теперь я хочу обновить изображение в моей базе данных. Для этого я создал этот метод:

public void UpdateBild(string picturepath, int id)
{
    string bildupdate = string.Format("UPDATE {0} set bild = (SELECT  BulkColumn FROM OPENROWSET(BULK  N'@pic', SINGLE_BLOB) AS x) where persid = @id", Klassen.Data.Gettabellenname());

    try
    {
        SqlVerb();
        com.CommandText = bildupdate;
        com.Parameters.AddWithValue("@pic", picturepath);
        com.Parameters.AddWithValue("@id", id);
        com.ExecuteNonQuery();
    }
    catch (SqlException sqex)
    {

    }
    catch (Exception ex)
    {

    }
    finally
    {
        DBVerbindung.DBVerb.scon.Close();
    }
}

Путь к картинке будет установлен так из текстового поля:

picturepath = tbDateiPfad.Text;

, и он будет передан методу как:

DBVerbindung.SQLStatements upbild = new DBVerbindung.SQLStatements();
upbild.UpdateBild(picturepath, id);

Если метод выполняется, я получаю ошибку «Picture not found».

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

Итак, не могли бы вы мне помочь, как я могу передать путь к файлу из текстового поля в правильной форме параметру для запроса SQL.

1 Ответ

1 голос
/ 19 апреля 2020

Имя файла должно быть указано как строковый литерал вместо параметра для OPENROWSET, поэтому вам нужно будет указать это значение в строке оператора SQL:

string bildupdate = string.Format("UPDATE {0} set bild = (SELECT BulkColumn FROM OPENROWSET(BULK N'{1}', SINGLE_BLOB) AS x) WHERE persid = @id;", Klassen.Data.Gettabellenname(), picturepath);

try
{
    SqlVerb();
    com.CommandText = bildupdate;
    com.Parameters.Add("@id", SqlDbType.Int).Value = id;
    com.ExecuteNonQuery();
…

Обратите внимание на имя таблицы и Значения имени файла должны быть получены из надежных источников и проверены, поскольку значения не параметризованы. Также избегайте AddWithValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...