2014-06-25 56 views
0

我有一個名爲ProductProfiles的SQL Server數據庫表,其中包含產品及其信息(每行一個產品)。在我正在處理的網站上,用戶可以上傳.csv文件,更改產品或產品的任何或所有列。數據庫表更新失敗上傳文件上傳

我有一個函數,它設置了一個UPDATE查詢,該查詢旨在用來自.csv文件的新信息替換任何「舊」信息。我似乎沒有收到任何錯誤(try-catch不報告任何錯誤,並且在控制檯中看到沒有錯誤)。

但是,只要上載包含更改的有效.csv文件,這些更改就不會寫入數據庫。我在SQL Server Management Studio中測試了UPDATE查詢,它似乎工作正常。

此功能有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 && 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

你在哪裏得到問題標題中提到的例外?發生這種情況時,運行時對象的狀態是什麼?你有沒有做過*調試?當你使用調試器時,它會在哪裏失敗? – David

+0

您確實注意到您的更新語句中沒有使用OrderBy參數? – rene

+2

你在混合兩個SqlCommands。你有一個''cmd'運行select查詢(* Why *),然後將SqlCommand更新查詢分配給'cmd2'。然而,參數被添加到'cmd'中,然後在你的循環之外,你可以在cmd上調用'ExecuteNonQuery',你應該使用'cmd2'。結論:您的代碼永遠不會調用您的更新查詢,因此數據庫中沒有更新。 – rene

回答

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(); 
    } 
} 
+0

好吧,那對我很有用!謝謝 :) –