2017-01-20 7 views
0

Я пытаюсь вставить некоторые данные в базу данных с помощью detailsView вставить команду. И его не работает. Вот мой код сзади. Мне удастся успешно вставить на страницу .aspx. У buti есть некоторые ограничения, так как мне также нужно использовать строку gridview в качестве данных, и я могу только выполнить ее, если я сделаю это на странице aspx.cs.DetailsView Вставка за кодом не работает

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) 
{ 
    string Price; 
    string Item; 
    string PetitionType; 
    string Note; 
    string UserNameGV = (GridView1.SelectedRow.Cells[3].Text); 
    string InvoiceGV = (GridView1.SelectedRow.Cells[5].Text); 
    string CreatedDateGV = (GridView1.SelectedRow.FindControl("lblLocalTime") as Label).Text; 
    SearchTB.Text = UserNameGV + " " + InvoiceGV + " " + CreatedDateGV; 
    DateTime CreatedDate = Convert.ToDateTime(CreatedDateGV); 

    for (Int32 attempt = 1; ;) 
    { 
     using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RapidVisaConnectionString"].ConnectionString)) 
     { 
      try 
      { 
       Price = ((TextBox)DetailsView1.Rows[1].FindControl("TextBox2")).Text; 
       Item = ((DropDownList)DetailsView1.Rows[1].FindControl("DropDownList2")).SelectedValue; 
       PetitionType = ((DropDownList)DetailsView1.Rows[1].FindControl("DropDownList3")).SelectedValue; 
       Note = ((TextBox)DetailsView1.Rows[1].FindControl("TextBox2")).Text; 
       con.Open(); 
       string Sql = "INSERT INTO InvoiceDetail (Price, Item, PetitionType, Note, Paid, Quantity, Invoice, UserName, CreatedDate) VALUES (@Price, @Item, @PetitionType, @Note, @Paid, @Quantity, @Invoice, @UserName, @CreatedDate)"; 
       SqlCommand cmd = new SqlCommand(Sql, con); 
       cmd.Parameters.AddWithValue("@Price", Price); 
       cmd.Parameters.AddWithValue("@Item", Item); 
       cmd.Parameters.AddWithValue("@PetitionType", PetitionType); 
       cmd.Parameters.AddWithValue("@Note", Note); 
       cmd.Parameters.AddWithValue("@Paid", 1); 
       cmd.Parameters.AddWithValue("@Quantity", 1); 
       cmd.Parameters.AddWithValue("@Invoice", InvoiceGV); 
       cmd.Parameters.AddWithValue("@UserName", UserNameGV); 
       cmd.Parameters.AddWithValue("@CreatedDate", CreatedDate); 
       cmd.ExecuteNonQuery(); 
       return; 
      } 
      catch (SqlException sqlException) 
      { 
       // Increment Trys 
       attempt++; 
       // Find Maximum Trys 
       // Override the web.config setting of 4 for retrys for this method because we are getting time-out errors. 
       Int32 maxRetryCount = Int32.Parse(ConfigurationManager.AppSettings["ConnectionRetrys"]); 
       //Int32 maxRetryCount = 5; 
       // Throw Error if we have reach the maximum number of retries 
       if (attempt == maxRetryCount) 
       { 
        ErrorLog EL = new ErrorLog(); 
        EL.WriteErrorWithSubjectNoWriteToDB("", "Error InvoiceDetail Max Retry"); 
        //going to stop throwing an error because we are getting too many 
        //throw; 
        break; 
       } 
       // Determine if we should retry or abort. 
       if (!SQLUtilities.RetryLitmus(sqlException)) 
       { 
        ErrorLog EL = new ErrorLog(); 
        EL.WriteErrorWithSubjectNoWriteToDB("Insert Failed RetryLitmus for user " + UserName + ". Sql exception number " + sqlException.Number.ToString() + ". " + sqlException.ToString(), "Error InvoiceDetail Failed Litmus"); 
        //going to stop throwing an error because we are getting too many 
        //throw; 
        break; 
       } 
       else 
        Thread.Sleep(SQLUtilities.ConnectionRetryWaitSeconds(4)); 
       //Changed from default of 5 seconds to 3 seconds 
       //Thread.Sleep(SQLUtilities.ConnectionRetryWaitSeconds(attempt)); 
      } 
     } 
    } 
} 

Вот сообщение об ошибке, что я получил.

Вставка не поддерживается источником данных «DetailsViewDS», если не указано значение . ВставитьСоздание. Проблема в том, что я не хочу добавлять InsertCommand на страницу aspx, только в aspx.cs

+0

Да, вот сообщение. Вставка не поддерживается источником данных «DetailsViewDS», если не указан параметр InsertCommand. Проблема в том, что я не хочу добавлять InsertCommand на странице aspx, только в aspx.cs – Ping

+0

Возможный дубликат [Вставка не поддерживается источником данных SqlDataSource1 ', если не указан параметр InsertCommand] (http://stackoverflow.com/questions/7283920/inserting-is-not-supported-by-data-source-sqldatasource1-except-insertcommand) –

+0

@M Adeel Khalid Я думаю, что я уже упоминал об этом, я не хочу добавлять insertcommand в aspx.page, только в aspx.cs I объясните это, потому что в моем коде есть некоторые ограничения. – Ping

ответ

0

Я протестировал ваш код, внесли некоторые изменения и он работает. Я использовал таблицу моего db, вы можете изменить ее в соответствии с вашими потребностями. Измените код SqlDataSource и C# внутри элемента DetailsView1_ItemInserting, как указано ниже. Он будет работать отлично.

SqlDataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT * FROM [Image]" InsertCommand="INSERT INTO [Image] ([Name]) VALUES (@Name)"> 
    <InsertParameters> 
     <asp:Parameter Name="Name" Type="String" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

вставки из кода за

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) 
    { 
     SqlDataSource sqldsInsertPassword = new SqlDataSource(); 
     sqldsInsertPassword.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
     sqldsInsertPassword.ProviderName = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName; 
     sqldsInsertPassword.InsertCommand = "INSERT INTO Image (Name) VALUES (@Name)"; 
     sqldsInsertPassword.InsertCommandType = SqlDataSourceCommandType.Text; 
     sqldsInsertPassword.InsertParameters.Add("Name", e.Values[0].ToString()); 
     sqldsInsertPassword.Insert(); 
    } 

Я надеюсь, что это решит проблему. С уважением!