Обновление таблицы базы данных не выполняется загрузка загрузка файла

#c# #sql #sql-server #sql-update

#c# #sql #sql-сервер #sql-обновление

Вопрос:

У меня есть вызываемая таблица базы данных SQL Server ProductProfiles , которая содержит продукты и их информацию (по одному продукту на строку). На сайте, над которым я работаю, пользователи могут загружать .csv файл с изменениями в любом или всех столбцах для продукта или продуктов.

У меня есть функция, которая задает UPDATE запрос, предназначенный для замены любой «старой» информации новой информацией из .csv файла. Похоже, я не получаю никаких ошибок ( try-catch не сообщает о каких-либо ошибках, и я не вижу ошибок в консоли).

Тем не менее, всякий раз, когда загружается действительный .csv файл с изменениями, эти изменения никогда не вносятся в базу данных. Я протестировал UPDATE запрос в SQL Server Management Studio, и, похоже, он работает нормально.

Эта функция имеет UPDATE запрос:

 private void SaveProfile(string[] curProfile)
{
    string profid = "";
    //have an update and an insert statement based on whether the profileid exists or is new
    string ProfileID = GetValue(curProfile, (int)ProfileColumns.ProfileId).Trim();
    string getProfId = "SELECT ProfileID FROM ProductProfile WHERE ProfileID = @ProfileID";
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        SqlCommand cmd = new SqlCommand(getProfId, cn);
        cmd.Parameters.AddWithValue("@ProfileID", ProfileID);

        cmd.CommandType = CommandType.Text;
        cn.Open();
        using (IDataReader reader = cmd.ExecuteReader())
        {
                while (reader.Read())
           {
               profid = reader["ProfileID"].ToString();

               if (profid != "")
               {
                   try
                   {
                       string query = "UPDATE ProductProfile SET (Name = @Name, Description = @Description, SpeciesLink = @SpeciesLink, LineDraw = @LineDraw, LineDrawThumbnail = @LineDrawThumbnail, ProfileThumbnail = @ProfileThumbnail, ComponentThickness = @ComponentThickness, ComponentWidth = @ComponentWidth, FinishedThickness = @FinishedThickness, FinishedWidth = @FinishedWidth, ClassificationID = @ClassificationID, StockOfCust = @StockOrCust, ComponentFactor = @ComponentFactor, Visibility = @Visibility, Notes = @Notes) WHERE ProfileID = @profid";

                       SqlCommand cmd2 = new SqlCommand(query, cn);
                       cmd.CommandType = CommandType.Text;
                       // cn.Open();
                       cmd.Parameters.AddWithValue("@profid", profid);
                       cmd.Parameters.AddWithValue("@Name", GetValue(curProfile, (int)ProfileColumns.Name).Trim());
                       cmd.Parameters.AddWithValue("@Description", GetValue(curProfile, (int)ProfileColumns.Description).Trim());
                       cmd.Parameters.AddWithValue("@SpeciesLink", GetValue(curProfile, (int)ProfileColumns.SpeciesLink).Trim());
                       cmd.Parameters.AddWithValue("@Linedraw", GetValue(curProfile, (int)ProfileColumns.LineDraw).Trim());
                       cmd.Parameters.AddWithValue("@LineDrawThumbnail", GetValue(curProfile, (int)ProfileColumns.LineDrawThumbnail).Trim());
                       cmd.Parameters.AddWithValue("@ProfileThumbnail", GetValue(curProfile, (int)ProfileColumns.ProfileThumbnail).Trim());
                       cmd.Parameters.AddWithValue("@ComponentThickness", GetValue(curProfile, (int)ProfileColumns.ComponentThickness).Trim());
                       cmd.Parameters.AddWithValue("@ComponentWidth", GetValue(curProfile, (int)ProfileColumns.ComponentWidth).Trim());
                       cmd.Parameters.AddWithValue("@FinishedThickness", GetValue(curProfile, (int)ProfileColumns.FinishedThickness).Trim());
                       cmd.Parameters.AddWithValue("@FinishedWidth", GetValue(curProfile, (int)ProfileColumns.FinishedWidth).Trim());
                       cmd.Parameters.AddWithValue("@ClassificationID", GetValue(curProfile, (int)ProfileColumns.ClassificationID).Trim());
                       cmd.Parameters.AddWithValue("@StockOrCust", GetValue(curProfile, (int)ProfileColumns.StockOrCust).Trim());
                       cmd.Parameters.AddWithValue("@ComponentFactor", GetValue(curProfile, (int)ProfileColumns.ComponentFactor).Trim());
                       cmd.Parameters.AddWithValue("@Visibility", GetValue(curProfile, (int)ProfileColumns.Visibility).Trim());
                       cmd.Parameters.AddWithValue("@Notes", GetValue(curProfile, (int)ProfileColumns.Notes).Trim());
                       cmd.Parameters.AddWithValue("@OrderBy", GetValue(curProfile, (int)ProfileColumns.OrderBy).Trim());

                       int profileID = Convert.ToInt32(GetValue(curProfile, (int)ProfileColumns.ProfileId));
                       SaveArtchStyle(profileID, curProfile);
                       SaveAssignedItems(profileID, curProfile);
                   }
                   catch (Exception ex)
                   {
                       Response.Write("ERROR: "   ex.Message.ToString()   "<br />");
                       ErrorLabel.Text = "There was an error with the ProfileID.";
                   }
               }
            }
         }

        cmd.ExecuteNonQuery();
        cn.Close();
    }
}
  

Эта функция вызывает SaveProfile функцию:

 protected void ProcessFileAction(string theStream)
{
    try
    {
        int LineCount = 1;

        using (StreamReader sr = new StreamReader(theStream))
        {
            string line;

            while ((line = sr.ReadLine()) != null)
            {
                if (LineCount > 1 amp;amp; line.Trim() != string.Empty)
                {
                    string[] tmpArray = line.Split('t');
                    //save changes
                    string ProfileID = GetValue(tmpArray, (int)ProfileColumns.ProfileId);
                    if (ProfileID != "")
                        SaveProfile(tmpArray);
                }
                LineCount  ;
            }
        }
    }
    catch(Exception x)
    {
        Response.Write("ProcessFileAction Error: "   x.Message.ToString()   "<br />");
    }
    //ErrorLabel.Text  = "Import Complete on <b><i>"   FileUpload1.PostedFile.FileName   "</i></b><br/>";
}
  

Комментарии:

1. Откуда вы получаете исключение, упомянутое в названии вопроса? Каково состояние объектов среды выполнения, когда это происходит? Вы проводили какую- либо отладку по этому поводу? Когда вы выполняете отладчик, где происходит сбой?

2. Вы заметили, что в вашем заявлении об обновлении не используется параметр OrderBy?

3. Вы смешиваете две команды SqlCommands. У вас есть один assinged для cmd запуска запроса select ( почему? ), А затем назначить запрос обновления SqlCommand cmd2 . Однако параметры добавляются cmd , а затем вне вашего цикла вы вызываете ExecuteNonQuery cmd, где вы должны были использовать cmd2 . Вывод: ваш код никогда не вызывает ваш запрос на обновление, следовательно, в базе данных нет обновлений.

4. @rene: и, кроме того, cmd2 который содержит UPDATE , никогда не выполняется….

Ответ №1:

Попробуйте с этим.

 private void SaveProfile(string[] curProfile)
{
    string profid = "";
    //have an update and an insert statement based on whether the profileid exists or is new
    string ProfileID = GetValue(curProfile, (int)ProfileColumns.ProfileId).Trim();
    string getProfId = "SELECT ProfileID FROM ProductProfile WHERE ProfileID = @ProfileID";
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        SqlCommand cmd = new SqlCommand(getProfId, cn);
        cmd.Parameters.AddWithValue("@ProfileID", ProfileID);

        cmd.CommandType = CommandType.Text;
        cn.Open();
        using (IDataReader reader = cmd.ExecuteReader())
        {
                while (reader.Read())
           {
               profid = reader["ProfileID"].ToString();

               if (profid != "")
               {
                   try
                   {
                       string query = "UPDATE ProductProfile SET (Name = @Name, Description = @Description, SpeciesLink = @SpeciesLink, LineDraw = @LineDraw, LineDrawThumbnail = @LineDrawThumbnail, ProfileThumbnail = @ProfileThumbnail, ComponentThickness = @ComponentThickness, ComponentWidth = @ComponentWidth, FinishedThickness = @FinishedThickness, FinishedWidth = @FinishedWidth, ClassificationID = @ClassificationID, StockOfCust = @StockOrCust, ComponentFactor = @ComponentFactor, Visibility = @Visibility, Notes = @Notes) WHERE ProfileID = @profid";

                       SqlCommand cmd2 = new SqlCommand(query, cn);
                       cmd2.CommandType = CommandType.Text;
                       cmd2.Parameters.AddWithValue("@profid", profid);
                       cmd2.Parameters.AddWithValue("@Name", GetValue(curProfile, (int)ProfileColumns.Name).Trim());
                       cmd2.Parameters.AddWithValue("@Description", GetValue(curProfile, (int)ProfileColumns.Description).Trim());
                       cmd2.Parameters.AddWithValue("@SpeciesLink", GetValue(curProfile, (int)ProfileColumns.SpeciesLink).Trim());
                       cmd2.Parameters.AddWithValue("@Linedraw", GetValue(curProfile, (int)ProfileColumns.LineDraw).Trim());
                       cmd2.Parameters.AddWithValue("@LineDrawThumbnail", GetValue(curProfile, (int)ProfileColumns.LineDrawThumbnail).Trim());
                       cmd2.Parameters.AddWithValue("@ProfileThumbnail", GetValue(curProfile, (int)ProfileColumns.ProfileThumbnail).Trim());
                       cmd2.Parameters.AddWithValue("@ComponentThickness", GetValue(curProfile, (int)ProfileColumns.ComponentThickness).Trim());
                       cmd2.Parameters.AddWithValue("@ComponentWidth", GetValue(curProfile, (int)ProfileColumns.ComponentWidth).Trim());
                       cmd2.Parameters.AddWithValue("@FinishedThickness", GetValue(curProfile, (int)ProfileColumns.FinishedThickness).Trim());
                       cmd2.Parameters.AddWithValue("@FinishedWidth", GetValue(curProfile, (int)ProfileColumns.FinishedWidth).Trim());
                       cmd2.Parameters.AddWithValue("@ClassificationID", GetValue(curProfile, (int)ProfileColumns.ClassificationID).Trim());
                       cmd2.Parameters.AddWithValue("@StockOrCust", GetValue(curProfile, (int)ProfileColumns.StockOrCust).Trim());
                       cmd2.Parameters.AddWithValue("@ComponentFactor", GetValue(curProfile, (int)ProfileColumns.ComponentFactor).Trim());
                       cmd2.Parameters.AddWithValue("@Visibility", GetValue(curProfile, (int)ProfileColumns.Visibility).Trim());
                       cmd2.Parameters.AddWithValue("@Notes", GetValue(curProfile, (int)ProfileColumns.Notes).Trim());
                       cmd2.Parameters.AddWithValue("@OrderBy", GetValue(curProfile, (int)ProfileColumns.OrderBy).Trim());

                       int profileID = Convert.ToInt32(GetValue(curProfile, (int)ProfileColumns.ProfileId));
                       SaveArtchStyle(profileID, curProfile);
                       SaveAssignedItems(profileID, curProfile);

        cmd2.ExecuteNonQuery();
                   }
                   catch (Exception ex)
                   {
                       Response.Write("ERROR: "   ex.Message.ToString()   "<br />");
                       ErrorLabel.Text = "There was an error with the ProfileID.";
                   }
               }
            }
         }
        cn.Close();
    }
}