Сохранить значение идентификатора в соединении SQL и вернуть, если оно существует - PullRequest
1 голос
/ 07 мая 2019

Я новичок в программировании и пытаюсь загрузить изображение и сохранить его в папке с текущим идентификатором продукта.Однако, когда я обновляю изображение, создается новая папка.Вместо возврата maxId ++, как я могу сохранить идентификатор в DataContext и вернуть его, если он существует?Здесь идет код.

    private void upload_Click_1(object sender, EventArgs e)
    {
        OpenFileDialog opFile = new OpenFileDialog();
        opFile.Title = "Select image for this product";
        opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
        if (opFile.ShowDialog() == DialogResult.OK)
        {
        try
        {
            string iName = opFile.FileName;
            var dir = @"images/" + GetCurrentId();
            var path = Path.Combine(dir, Path.GetFileName(iName));

            if (!Directory.Exists(dir) &&(produto)this.tbprodutoBindingSource.Current == null))
            {
                Directory.CreateDirectory(dir);
            }

            File.Copy(iName, path);
        }
           catch (Exception ex)
        {
            MessageBox.Show("Unable to open file " + ex.Message);
        }
    }
    else
    {
        opFile.Dispose();
    }
        }

    private int GetCurrentId()
    {
        var result = dataContextFactory.DataContext.produtos.Max(x => x.id_produto);
        int maxId = Convert.ToInt32(result);
        if (maxId == 0) maxId = 1;
        else
            maxId++;

        return maxId;

    }

Ответы [ 3 ]

0 голосов
/ 13 мая 2019

File.Copy (iName, путь) не требует одинакового имени файла iName и пути, вы можете изменить имя, и это не вызовет никаких проблем.На самом деле это вызывает ошибку, потому что я копирую файл, когда я изменяю имя изображения, это вызывает ошибку, и изображение не может быть загружено.

Я не хочу создавать папку каждый раз, когда загружаю файлimage, я просто хочу добавить идентификатор продукта, который еще не был создан, в папку изображений.Если текущий идентификатор продукта равен 22, мне нужна папка с именем 22 и изображениями на ней.Что было намечено, позволяет мне также обновить?

0 голосов
/ 13 мая 2019

File.Copy (iName, путь) не требует того же имени файла iName и путь, вы можете изменить имя, и это не будет создавать никаких проблем. На самом деле это вызывает ошибку, потому что я копирую файл, когда я изменить имя изображения вызывает ошибку и изображение не может быть загруженным.

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

Я не хочу создавать папку каждый раз, когда я загружаю изображение, я хочу Откорректируйте идентификатор продукта, который еще не был создан, в папку изображений. Если текущий идентификатор продукта равен 22, мне нужна папка с именем 22 и его изображения на нем.

Вы можете добиться этого, используя что-то вроде этого:

var dir = @"images/" + imageID;
var path = Path.Combine(dir, Path.GetFileName(iName));
File.Copy(iName, path);

Что было предназначено, позволяет мне также обновить?

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

// Delete the old image in the folder
var dir = @"images/" + imageID;
string oldImageName = Directory.GetFiles(dir).FirstOrDefault();
File.Delete(oldImageName);

// Copy the new image to the folder
var path = Path.Combine(dir, Path.GetFileName(iName));
File.Copy(iName, path);
0 голосов
/ 07 мая 2019

Я действительно не понимаю, что вы хотите, но я постараюсь решить проблему, которую я получаю.

  1. Хотите ли вы создавать новую папку каждый раз при загрузке новой фотографии или хотите переименовать фотографию в [Id][FileName].jpg? Если вы хотите последнее, вы можете изменить это
var dir = @"images/" + GetCurrentId();
var path = Path.Combine(dir, Path.GetFileName(iName));

в это

var dir = @"images";
var fileName = GetCurrentId() + Path.GetFileName(iName);
var path = Path.Combine(dir, fileName);
  1. Если вы хотите использовать автоинкрементный идентификатор, вы должны поместить автоинкремент в базу данных, а не извлекать последний идентификатор и увеличивать его. Однако, если ваш идентификатор не очень важен (вам просто нужен его уникальный идентификатор), вы можете использовать uuid вместо автоматического увеличения. Например, вы можете обратиться к здесь .
string id = Guid.NewGuid().ToString();
  1. File.Copy(iName, path) не требует одинакового имени файла iName и пути, вы можете изменить имя, и это не вызовет никаких проблем.

  2. Если продукт является новой записью, вы можете сгенерировать uuid, использовать его для изображения, а затем использовать его для идентификатора продукта.

string id = Guid.NewGuid().ToString();
Product newProduct = new Product();
newProduct.ProductID = id;
var dir = "@images";
var path = Path.Combine(dir, id);
File.Copy(iName, path);

Если продукт является старой записью, вы можете получить идентификатор продукта и использовать этот идентификатор в качестве имени изображения.

Product existingProduct = getProduct();
string id = existingProduct.GetID();
var dir = "@images";
var path = Path.Combine(dir, id);
File.Copy(iName, path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...