我有一個名爲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/>";
}
你在哪裏得到問題標題中提到的例外?發生這種情況時,運行時對象的狀態是什麼?你有沒有做過*調試?當你使用調試器時,它會在哪裏失敗? – David
您確實注意到您的更新語句中沒有使用OrderBy參數? – rene
你在混合兩個SqlCommands。你有一個''cmd'運行select查詢(* Why *),然後將SqlCommand更新查詢分配給'cmd2'。然而,參數被添加到'cmd'中,然後在你的循環之外,你可以在cmd上調用'ExecuteNonQuery',你應該使用'cmd2'。結論:您的代碼永遠不會調用您的更新查詢,因此數據庫中沒有更新。 – rene