2014-02-14 93 views
0

我有一個測試gridview設置與編輯模板爲我的用戶能夠編輯/更新/添加幾個記錄。下面是測試的樣子:錯誤:無法將字符串轉換爲int32在調試

enter image description here

當我打更新編輯,更改值,然後單擊更新值不更新。當我把一個斷點上的更新語句它指向的數據表中記載:

private int InpatientMeasures = 1; 
private int OutpatientMeasures = 2; 

private int HeartAttack = 1; 
private int HeartFailure = 2; 
private int Pneumonia = 3; 
private int SIPrevention = 4; 
private int Surgery = 5; 

下面是數據表: failed to convert string to int32

名單如下定義

private DataTable GetData(SqlCommand cmd) 
{ 
    DataTable dt = new DataTable(); 
    SqlConnection con = new SqlConnection(conn); 
    SqlDataAdapter sda = new SqlDataAdapter(); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = con; 
    con.Open(); 
    sda.SelectCommand = cmd; 
    sda.Fill(dt); //This is where it breaks and gives the error in debug mode 
    return dt; //The Code will actually work until the line above but will not reach here 
} 

的調試將不會指定什麼int。我也將@num變量值轉換爲一個int值,但它仍然不會更新。

protected void UpdateQualityMeasures(object sender, GridViewUpdateEventArgs e) 
{ 
    string Mynum = ((Label)gvMainView.FooterRow.FindControl("lblNum")).Text; 
    string SiteID = ((DropDownList)gvMainView.FooterRow.FindControl("ddlSite")).Text; 
    switch (SiteID) 
    { 
     case "Inpatient Measures": 
      SiteID = InpatientMeasures.ToString(); 
      break; 
     case "Outpatient Measures": 
      SiteID = OutpatientMeasures.ToString(); 
      break; 
    } 

    string ServiceLineID = ((DropDownList)gvMainView.FooterRow.FindControl("ddlServiceLine")).Text; 
    switch (ServiceLineID) 
    { 
     case "Heart Attack": 
      ServiceLineID = HeartAttack.ToString(); 
      break; 
     case "Heart Failure": 
      ServiceLineID = HeartFailure.ToString(); 
      break; 
     case "Pneumonia": 
      ServiceLineID = Pneumonia.ToString(); 
      break; 
     case "Surgical Infection Prevention": 
      ServiceLineID = SIPrevention.ToString(); 
      break; 
     case "Surgery": 
      ServiceLineID = Surgery.ToString(); 
      break; 
    } 


    string Measure = ((TextBox)gvMainView.FooterRow.FindControl("txtMeasure")).Text; 
    string MyCompAvg = ((TextBox)gvMainView.FooterRow.FindControl("txtMyCompAvg")).Text; 
    string NationalAvg = ((TextBox)gvMainView.FooterRow.FindControl("txtNationalAvg")).Text; 
    string KYStateAvg = ((TextBox)gvMainView.FooterRow.FindControl("txtKYStateAvg")).Text; 

    SqlConnection con = new SqlConnection(conn); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandType = CommandType.Text; 
    string QueryPartB = Measures; 
    int NewID = Convert.ToInt32(Mynum); 

    cmd.CommandText = "update quality_Measures set [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] where " + 
    "[email protected];" + QueryPartB; 
    cmd.Parameters.Add("@num", SqlDbType.Int).Value = NewID; 
    cmd.Parameters.Add("@SiteID", SqlDbType.NVarChar).Value = SiteID; 
    cmd.Parameters.Add("@ServiceLineID", SqlDbType.NVarChar).Value = ServiceLineID; 
    cmd.Parameters.Add("@Measure", SqlDbType.NText).Value = Measure; 
    cmd.Parameters.Add("@MyCompAvg", SqlDbType.NVarChar).Value = MyCompAvg; 
    cmd.Parameters.Add("@KYStateAvg", SqlDbType.NVarChar).Value = KYStateAvg; 
    cmd.Parameters.Add("@NationalAvg", SqlDbType.NVarChar).Value = NationalAvg; 
    gvMainView.EditIndex = -1; 
    gvMainView.DataSource = GetData(cmd); 
    gvMainView.DataBind(); 
} 

你會發現存在這樣說QueryPartB變量設置數據表回更新後的影像中選擇更新的地方。

編輯 - 這裏是請求堆棧跟蹤

at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType, Boolean& coercedToDataFeed, Boolean& typeChanged, Boolean allowStreaming) 
at System.Data.SqlClient.SqlParameter.GetCoercedValue() 
at System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc) 
at System.Data.SqlClient.SqlCommand.BuildParamList(TdsParser parser, SqlParameterCollection parameters) 
at System.Data.SqlClient.SqlCommand.BuildExecuteSql(CommandBehavior behavior, String commandText, SqlParameterCollection parameters, _SqlRPC& rpc) 
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) 
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) 
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) 
at QualityOutcomeGraphGen_test.Admin.GetData(SqlCommand cmd) in c:\Users\20002143\Documents\Visual Studio 2012\Projects\QualityOutcomeGraphGen_test\QualityOutcomeGraphGen_test\Admin.aspx.cs:line 57 
at QualityOutcomeGraphGen_test.Admin.UpdateQualityMeasures(Object sender, GridViewUpdateEventArgs e) in c:\Users\20002143\Documents\Visual Studio 2012\Projects\QualityOutcomeGraphGen_test\QualityOutcomeGraphGen_test\Admin.aspx.cs:line 241 
at System.Web.UI.WebControls.GridView.OnRowUpdating(GridViewUpdateEventArgs e) 
at System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) 
at System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) 
at System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) 
at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) 
at System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) 
at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) 
at System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) 
at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) 
at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
+1

您能否將您的錯誤粘貼到堆棧跟蹤中? – Alok

+0

你的錯誤在gvMainView行中。DataSource = GetData(cmd); ?? – Akrem

+0

@Alok Stack發佈:) – Skullomania

回答

0

我需要找到該行。因此,我改變

string Mynum = ((Label)gvMainView.FooterRow.FindControl("lblNum")).Text; 

string Mynum = ((Label)gvMainView.Rows[e.RowIndex].FindControl("lblNum")).Text; 

和現在的作品!

1

看來你NewID變量的類型不匹配的database.Try類型解析它以Integer

cmd.Parameters.Add("@num", SqlDbType.Int).Value = int.Parse(NewID); 

此外,您應該檢查您的其他參數類型,並確保它們與SqlDbType's.匹配。對應的類型NVarCharNTextstring。因此,您的其他參數類型(SiteIDServiceLineID等)應爲string

+0

它說解析有無效的參數 – Skullomania

1

試試這個:

cmd.Parameters.Add(new SqlParameter() { DbType = DbType.Int32, ParameterName = "@num", Value = Convert.ToInt32(NewID) }); 

我不知道什麼是得心臟病在ServiceLineID = HeartAttack.ToString();即。一個類型或一個變量。看起來更像一個類型給我。如果我是你,我會將HeartAttackId綁定到dropDown列表中的值。例如:

new ListItem() { Text = "Heart Attack", Value = "1" }; // here 1 is HeartAttackId 

然後retreiving它會像

string ServiceLineID = ((DropDownList)gvMainView.FooterRow.FindControl("ddlServiceLine")).Value; 
+0

我編輯原始帖子。如果它還沒有被定義,這將是完美的......這是什麼導致我的困惑。它不應該有更新的問題 – Skullomania

相關問題