none
關於C# 透過ODBC與Informix做Update set動作 RRS feed

  • 問題

  • 請問各位前輩
    小弟Update set (GridView1_RowUpdating)功能鍵,編輯一筆資料時有問題,卡很久找不出甚麼問題。
    請各位前輩幫幫忙 ......錯誤訊息如下圖:

    da.UpdateCommand= new OdbcCommand("UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?" + " WHERE no=?",Conn);
     da.UpdateCommand.Parameters.Add("@no", OdbcType.Int,8);
     da.UpdateCommand.Parameters["@no"].Value = GridView1.DataKeys[e.RowIndex].Value;

      //點擊更新按鈕
            protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                //String updateString = "UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?" + " WHERE no=?";
                //OdbcCommand cmd = new OdbcCommand(updateString, Conn);
                da.UpdateCommand= new OdbcCommand("UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?" + " WHERE no=88",Conn);
                //OdbcDataAdapter adapter =  new OdbcDataAdapter("UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?" + " WHERE no=?",Conn);
    
                da.UpdateCommand.Parameters.Add("@no", OdbcType.Int,8);
                //da.UpdateCommand.Parameters.Add("@no" ,OdbcType.Int, 5, "no").SourceVersion =DataRowVersion.Original;
                //da.UpdateCommand.Parameters.Add("@workday", OdbcType.DateTime);
                da.UpdateCommand.Parameters.Add("@projectname", OdbcType.VarChar,30);
                da.UpdateCommand.Parameters.Add("@categorname", OdbcType.VarChar,30);
                da.UpdateCommand.Parameters.Add("@recordofwork", OdbcType.Double);
                da.UpdateCommand.Parameters.Add("@content", OdbcType.VarChar,255);
                da.UpdateCommand.Parameters.Add("@hwversion", OdbcType.VarChar,255);
                da.UpdateCommand.Parameters.Add("@swversion", OdbcType.VarChar,255);
                //cmd.Parameters.Add("@belongdepid", SqlDbType.VarChar);
                da.UpdateCommand.Parameters.Add("@testquantity", OdbcType.Int,0);
                da.UpdateCommand.Parameters.Add("@customer", OdbcType.VarChar,30);
                //da.UpdateCommand.Parameters.Add("@demandname", OdbcType.VarChar, 30);
    
                da.UpdateCommand.Parameters["@no"].Value = GridView1.DataKeys[e.RowIndex].Value;
                //cmd.Parameters["@workday"].Value = GridView1.Rows[e.RowIndex].Cells[1].Text;
                da.UpdateCommand.Parameters["@projectname"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_proj")).SelectedItem.Text;
                da.UpdateCommand.Parameters["@categorname"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_catego")).SelectedItem.Text;
                da.UpdateCommand.Parameters["@recordofwork"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_recordofwork")).SelectedItem.Value;
                da.UpdateCommand.Parameters["@content"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_content")).Text;
                da.UpdateCommand.Parameters["@hwversion"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_swver")).Text;
                da.UpdateCommand.Parameters["@swversion"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_hwver")).Text;
                //cmd.Parameters["@belongdepid"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_belon")).SelectedValue;
                da.UpdateCommand.Parameters["@testquantity"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_testquantity")).Text;
                da.UpdateCommand.Parameters["@customer"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_customer")).SelectedItem.Text;
                //da.UpdateCommand.Parameters["@demandname"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_demandname")).SelectedItem.Text;
    
    
                Conn.Open();
                da.UpdateCommand.ExecuteNonQuery();
                cmd.Dispose();
                Conn.Close();
                GridView1.EditIndex = -1;
                GVgetData();
            }

    2018年3月21日 上午 08:43

所有回覆

  • 你的例外狀況寫的是轉換過程中發生錯誤,可參考以下說明

    當非數值的 char、nchar、varchar 或 nvarchar 資料被轉換成 int、float、numeric 或 decimal 時, SQL Server 會傳回錯誤訊息。 當空字串 (" ") 被轉換為 numeric 或 decimal 時, SQL Server 也會傳回錯誤。

    CAST 和 CONVERT

    2018年3月21日 上午 09:27
  • 錯誤訊息是:A Charater to numeric conversion process failed

    所以可以檢查一下參數有那些是型態為數值, 但是提供的參數內容是字串, 檢視其內容是否不正確, 造成轉型態數值發生失敗

    2018年3月22日 上午 12:37
  • 各位大大前輩們

    小弟想釐清哪裡出問題所以把程式所有欄位都MARK掉只留一個欄位content,這欄位在informix DB為content  varchar(255)

    在做update set動作時還是出現以下錯誤畫面

    da.UpdateCommand = new OdbcCommand("UPDATE worksheet SET content=?" + " WHERE no=?", Conn);

     da.UpdateCommand.Parameters.Add("@content", OdbcType.VarChar,255);

     da.UpdateCommand.Parameters["@content"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_content")).Text;

            //點擊更新按鈕
            protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
            {
                //String updateString = "UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?" + " WHERE no=?";
                //OdbcCommand cmd = new OdbcCommand(updateString, Conn);
                //da.UpdateCommand= new OdbcCommand("UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?,demandname=?" + " WHERE no=103",Conn);
                da.UpdateCommand = new OdbcCommand("UPDATE worksheet SET content=?" + " WHERE no=?", Conn);
                //OdbcDataAdapter adapter =  new OdbcDataAdapter("UPDATE worksheet SET projectname=?,categorname=?,recordofwork=?,content=?,hwversion=?,swversion=?,testquantity=?,customer=?" + " WHERE no=?",Conn);
    
                //da.UpdateCommand.Parameters.Add("@no", OdbcType.Int);
                //da.UpdateCommand.Parameters.Add("@no" ,OdbcType.Int, 5, "no").SourceVersion =DataRowVersion.Original;
                //da.UpdateCommand.Parameters.Add("@workday", OdbcType.DateTime);
                //da.UpdateCommand.Parameters.Add("@projectname", OdbcType.VarChar,30);
                //da.UpdateCommand.Parameters.Add("@categorname", OdbcType.VarChar,30);
                //da.UpdateCommand.Parameters.Add("@recordofwork", OdbcType.Double);
                da.UpdateCommand.Parameters.Add("@content", OdbcType.VarChar,255);
               // da.UpdateCommand.Parameters.Add("@hwversion", OdbcType.VarChar,255);
                //da.UpdateCommand.Parameters.Add("@swversion", OdbcType.VarChar,255);
                //cmd.Parameters.Add("@belongdepid", SqlDbType.VarChar);
                //da.UpdateCommand.Parameters.Add("@testquantity", OdbcType.Int,0);
                //da.UpdateCommand.Parameters.Add("@customer", OdbcType.VarChar,30);
                //da.UpdateCommand.Parameters.Add("@demandname", OdbcType.VarChar, 30);
    
                //da.UpdateCommand.Parameters["@no"].Value = GridView1.DataKeys[e.RowIndex].Value;
                //cmd.Parameters["@workday"].Value = GridView1.Rows[e.RowIndex].Cells[1].Text;
                //da.UpdateCommand.Parameters["@projectname"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_proj")).SelectedItem.Text;
                //da.UpdateCommand.Parameters["@categorname"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_catego")).SelectedItem.Text;
                //da.UpdateCommand.Parameters["@recordofwork"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_recordofwork")).SelectedItem.Value;
                da.UpdateCommand.Parameters["@content"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_content")).Text;
                //da.UpdateCommand.Parameters["@hwversion"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_swver")).Text;
                //da.UpdateCommand.Parameters["@swversion"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_hwver")).Text;
                //cmd.Parameters["@belongdepid"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_belon")).SelectedValue;
                //da.UpdateCommand.Parameters["@testquantity"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_testquantity")).Text;
                //da.UpdateCommand.Parameters["@customer"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_customer")).SelectedItem.Text;
                //da.UpdateCommand.Parameters["@demandname"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("Drop_demandDpartment")).SelectedItem.Text;
    
                Conn.Open();
                da.UpdateCommand.ExecuteNonQuery();
                cmd.Dispose();
                Conn.Close();
                GridView1.EditIndex = -1;
                GVgetData();
            }

    2018年3月22日 上午 11:30
  • 這次的錯誤訊息是:Wrong number of Parameters, 意思是您只提供一個參數, 但是執行時發現需要更多的參數
    2018年3月23日 上午 12:38