Visual Basic не записывает в серверную часть SQL

#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 ) ? Возможно, что возникают ошибки, но вы их не видите.