#vb.net
#vb.net
Вопрос:
У меня возникли проблемы с выяснением, почему мои обновления и вставки не записываются в серверную часть SQL Server. У меня мало опыта работы с Visual Basic, и мне интересно, может ли кто-нибудь указать мне правильное направление.
Protected Sub CatNutritionTypes_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
Try
Using sqlCon As SqlConnection = New SqlConnection(Azure_Connection_String)
sqlCon.Open()
Dim query As String = "UPDATE Norm.CAT_Nutrition_Types SET Genesis_NutrientKey=@Genesis_NutrientKey, CAT_UOMID=@CAT_UOMID, IsViewable=@IsViewable, IsDailyValue=@IsDailyValue, IsCalculated=@IsCalculated, IsUserCreated=@IsUserCreated, CAT_Nutrient_Group_ID=@CAT_Nutrient_Group_ID, Genesis_API_GUID=@Genesis_API_GUID, EnteredDateTime=@EnteredDateTime, UserID=@UserID, IsDeleted=@IsDeleted, DeletedDateTime=@DeletedDateTime, IsRequired=@IsRequired, OrderBy=@OrderBy, Percent_Diff=@Percent_Diff WHERE CAT_Nutrition_TypesID = @id"
Dim sqlCmd As SqlCommand = New SqlCommand(query, sqlCon)
sqlCmd.Parameters.AddWithValue("@Genesis_NutrientKey", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtGenesisNutrientKey"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@Nutritional_Desc", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtNutritionalDesc"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@AbbreviatedName", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtAbbreviatedName"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@CAT_UOMID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtCatUomId"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsViewable", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsViewable"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsDailyValue", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsDailyValue"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsCalculated", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsCalculated"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsUserCreated", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsUserCreated"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@CAT_Nutrient_Group_ID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtCatNutrientGroupId"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@Genesis_API_GUID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtGenesisApiGuid"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@EnteredDateTime", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtEnteredDateTime"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@UserID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtUserId"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsDeleted", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsDeleted"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@DeletedDateTime", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtDeletedDateTime"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsRequired", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsRequired"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@OrderBy", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtOrderBy"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@Percent_Diff", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtPercentDiff"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@id", Convert.ToInt32(CatNutritionTypes.DataKeys(e.RowIndex).Value.ToString()))
sqlCmd.ExecuteNonQuery()
CatNutritionTypes.EditIndex = -1
PopulateGridview()
lblSuccessMessage.Text = "Selected Record Updated"
lblErrorMessage.Text = ""
End Using
Catch ex As Exception
lblSuccessMessage.Text = ""
lblErrorMessage.Text = ex.Message
End Try
End Sub
Protected Sub CatNutritionTypes_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
Try
If e.CommandName.Equals("AddNew") Then
Using sqlCon As SqlConnection = New SqlConnection(Azure_Connection_String)
sqlCon.Open()
Dim query As String = "INSERT INTO Norm.CAT_Nutrition_Types (Genesis_NutrientKey, Nutritional_Desc, AbbreviatedName, CAT_UOMID, IsViewable, IsDailyValue, IsCalculated, IsUserCreated, CAT_Nutrient_Group, Genesis_API_GUID, EnteredDateTime, UserID, IsDeleted, DeletedDateTime, IsRequired, OrderBy, Percent_Diff) VALUES (@Genesis_NutrientKey, @Nutritional_Desc, @AbbreviatedName, @CAT_UOMID, @IsViewable, @IsDailyValue, @IsCalculated, @IsUserCreated, @CAT_Nutrient_Group, @Genesis_API_GUID, @EnteredDateTime, @UserID, @IsDeleted, @DeletedDateTime, @IsRequired, @OrderBy, @Percent_Diff)"
Dim sqlCmd As SqlCommand = New SqlCommand(query, sqlCon)
sqlCmd.Parameters.AddWithValue("@Genesis_NutrientKey", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtGenesisNutrientKeyFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@Nutritional_Desc", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtNutritionalDescFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@AbbreviatedName", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtAbbreviatedNameFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@CAT_UOMID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtCatUomIdFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsViewable", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsViewableFooter"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsDailyValue", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsDailyValueFooter"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsCalculated", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsCalculatedFooter"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsUserCreated", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsUserCreatedFooter"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@CAT_Nutrient_Group_ID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtCatNutrientGroupIdFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@Genesis_API_GUID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtGenesisApiGuidFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@EnteredDateTime", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtEnteredDateTimeFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@UserID", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtUserIdFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsDeleted", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsDeletedFooter"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@DeletedDateTime", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtDeletedDateTimeFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@IsRequired", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtIsRequiredFooter"), CheckBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@OrderBy", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtOrderByFooter"), TextBox)).Text.Trim())
sqlCmd.Parameters.AddWithValue("@Percent_Diff", (TryCast(CatNutritionTypes.FooterRow.FindControl("txtPercentDiffFooter"), TextBox)).Text.Trim())
sqlCmd.ExecuteNonQuery()
PopulateGridview()
lblSuccessMessage.Text = "New Record Added"
lblErrorMessage.Text = ""
End Using
End If
Catch ex As Exception
lblSuccessMessage.Text = ""
lblErrorMessage.Text = ex.Message
End Try
End Sub
Комментарии:
1. Я считаю, что AddWithValue обычно считается проблематичным. Вам было бы лучше создать параметр, а затем присвоить его значение. Могу ли я предложить разделить это на несколько методов. Один для получения значений данных из gridview. Один для получения значений данных, сборки sql и его выполнения. Какой результат вы получаете
ExecuteNonQuery
?2. @AndrewMortimer Я написал книгу о проблеме AddWithValue(). Да, это проблематично, но в этом случае с ним все должно быть в порядке. Для ОБНОВЛЕНИЯ, в котором у вас есть определенное целочисленное значение идентификатора, если вы правильно определяете этот идентификатор (и принудительно конвертируете. ToInt32() гарантирует это), вам не нужно выполнять сканирование таблиц или индексов или неправильные преобразования значений для каждой строки.
3. Не могли бы вы добавить, как вы пришли к выводу, что база данных не обновляется, пожалуйста? — Вы полагаетесь на используемый вами GridView или другой метод?
4. На другом примечании. В подраздел
CatNutritionTypes_RowUpdating
вы добавляете параметры: Nutritional_Desc и abbrewatedname , но их нет в инструкции Sql для обновления соответствующего столбца5. Что произойдет, если вы закомментируете блок обработки исключений (
Catch ex As Exception
) ? Возможно, что возникают ошибки, но вы их не видите.