2

次のエラーが表示されますExecuteNonQuery()

"String or binary data would be truncated. The statement has been terminated."

問題は、送信される変数が DB 内の変数よりも大きいことです。次のコードを使用しています。

      protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //GridViewRow row = GridView1.SelectedRow;
        GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
        var Username = (Label)row.FindControl("Label3");
        var Password = (Label)row.FindControl("Label4");
        var Email = (Label)row.FindControl("Label5");
       // var ID_Inscricao = ((Label)row.FindControl("Label1")).Text;
        var ID_Inscricao = ((Label)row.FindControl("Label1")).Text;


        SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["FormacaoConnectionString"].ToString());
        SqlCommand sqlComm = new SqlCommand();


        sqlComm = sqlConn.CreateCommand();
        sqlComm.Parameters.Add("@Username", SqlDbType.Text);
        sqlComm.Parameters.Add("@Password", SqlDbType.Text);
        sqlComm.Parameters.Add("@Email", SqlDbType.Text);
        sqlComm.Parameters.Add("@ID_Inscricao", SqlDbType.Int);

        sqlComm.Parameters["@Username"].Value = Convert.ToString(Username);
        sqlComm.Parameters["@Password"].Value = Convert.ToString(Password);
        sqlComm.Parameters["@Email"].Value = Convert.ToString(Email);
        sqlComm.Parameters["@ID_Inscricao"].Value = Convert.ToInt32(ID_Inscricao);

        string sql = "INSERT INTO Utilizadores (Username, Password, Email, ID_Inscricao) VALUES (@Username, @Password, @Email, @ID_Inscricao)";
        sqlComm.CommandText = sql;
        sqlConn.Open();
        sqlComm.ExecuteNonQuery();
        sqlConn.Close();
    }
4

3 に答える 3

6

これは、その列には長すぎる何かを列に挿入しようとすると発生します。

たとえば、列がVARCHAR(10)あり、値を挿入しようとするとします"ABCDEFGHIJKLMNOP"。これにより、データが切り捨てられ、エラーが発生します。

あなたの場合はどの列かわかりませんがUsernamePasswordまたはのいずれかである必要がありEmailます。

于 2012-08-14T14:24:33.160 に答える
0

問題は、入力しようとしているデータベースのデータ型が、渡す値の 1 つよりも小さいことです。@Username、@Password、および @Email の各パラメーターを確認し、どれがデータベースのデータ型よりも大きいかを確認する必要があります。次に、必要に応じてデータベース内のデータ型のサイズを増やすか、送信する前にパラメーター値をトリミングできます。

于 2012-08-14T14:27:53.903 に答える
-1
 Dim qry As String
        qry = "inserg into Table1 values('" & TextBox1.Text & "'+'" & TextBox2.Text & "'+'" & DropDownList1.Text & "'+'" & DropDownList2.Text & "'+'" & TextBox4.Text & "'+'" & TextBox5.Text & "'+'" & RadioButtonList1.Text & "'+'" & RadioButton1.Text & "'+'" & RadioButtonList2.Text & "'+'" & CheckBoxList1.Text & "'+'" & TextBox6.Text & "'+'" & TextBox7.Text & "'+'" & TextBox8.Text & "'+'" & TextBox9.Text & "'+'" & TextBox10.Text & "'+'" & RadioButtonList3.Text & "'"
        Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\MCALab\My Documents\net.mdb")
        Dim cmd As New OleDbCommand(qry, cn)
        cn.Open()
        **cmd.ExecuteNonQuery()**this line have error please any one know mean debug it.

        cn.Close()
于 2013-07-22T09:26:29.543 に答える