0

グリッドビューの代わりにリピーターを使用します。ボタンでコードを実行しましたが、デバッグするとエラーが表示されます....そしてドキュメントを承認しようとしていますが、エラーが発生します

さて、コード全体を投稿しました、、

   protected void Button1_Click(object sender, EventArgs e)
    {
     string connStr = ConfigurationManager.ConnectionStrings["mydms"].ConnectionString;
          SqlConnection mySQLconnection = new SqlConnection(connStr);
          if (mySQLconnection.State == ConnectionState.Closed)
          {
              mySQLconnection.Open();

              for (int i = 0; i < Repeater2.Items.Count; i++)
              {
                  DropDownList DropDownListcontrol =
              ((DropDownList)Repeater2.Items[i].FindControl("DropDownList4"));
                  Label DocId = ((Label)Repeater2.Items[i].FindControl("DocId"));
                 SqlCommand cmd = new SqlCommand("approveddd", mySQLconnection);
                  cmd.CommandType = CommandType.StoredProcedure;
                  cmd.Parameters.Add("@DocID", SqlDbType.Int).Value =
                 Convert.ToInt32((DocId.Text));

                  cmd.Parameters.Add("@ApproveID", SqlDbType.Int).Value = 
            Convert.ToInt32(DropDownListcontrol.SelectedValue);
                  cmd.Parameters.Add("@ApproveBy", SqlDbType.VarChar, 50).Value = 
               (Session["Login2"]);

                  cmd.ExecuteNonQuery();
                  //UPDATE APPPROVEID IN DOCUMENTINFO TABLE
                  DMSLIB.Doc myDoc = new DMSLIB.Doc();
                  myDoc.MarkDocAs(Convert.ToInt16(DocId.Text), 
                Convert.ToInt32(DropDownListcontrol.SelectedValue));

              }

          }
          else
          {
              apfi.Text = "Error";
          }
          if (mySQLconnection.State == ConnectionState.Open)
          {
              mySQLconnection.Close();
          }
                }

この行のエラー

                      cmd.Parameters.Add("@DocID", SqlDbType.Int).Value =
             Convert.ToInt32((DocId.Text));

何か案が?

エラー: 入力文字列が正しい形式ではありませんでした

4

2 に答える 2

1

このエラーは、DocId.Text が空の場合、空の文字列を整数に変換しようとしているために発生します。これにより、「入力文字列が正しい形式ではありませんでした」というメッセージが表示されます。例外。

まず、DocID が空の文字列かどうかを検出し、cmd インスタンスに -1 (たとえば) を割り当てる必要があります。

最初に行う必要があります:

DocId.Text= (DocId.Text == "") ? DBNull.Value : Convert.ToInt32(DocId.Text);

次に、それを cmd オブジェクトに割り当てます

cmd.Parameters.Add("@DocID", SqlDbType.Int).Value =Convert.ToInt32((DocId.Text));
于 2013-11-14T12:02:52.793 に答える