1

私はこれに完全に困惑しており、私はC#にまったく慣れていないので、あなたの素晴らしい人々の1人が私を助けてくれるかもしれません. ADO.NET を使用してフォーム フィールドからデータベースを更新しようとしています。

基本的に、私が得ているエラーは、データベースに null 値を挿入しようとしているということです。エラーの正確なテキストは次のとおりです。

System.ArgumentNullException: The SqlParameterCollection only accepts non-null SqlParameter type objects.

使用しようとしているページのコードビハインドは次のとおりです。

private void ExecuteInsert(string firstName, string lastName, string emailAddress, string city, string phone)
{
    SqlConnection conn = new SqlConnection(GetConnectionString());
    string sql = "INSERT INTO contactInfo (firstName, lastName, emailAddress, city, phone) VALUES "
                + " (@firstName, @lastName, @emailAddress, @city, @phone)";

    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        SqlParameter[] param = new SqlParameter[6];
        param[0] = new SqlParameter("@firstName", SqlDbType.NVarChar, 25);
        param[1] = new SqlParameter("@lastName", SqlDbType.NVarChar, 25);
        param[2] = new SqlParameter("@emailAddress", SqlDbType.NVarChar, 30);
        param[3] = new SqlParameter("@city", SqlDbType.NVarChar, 50);
        param[4] = new SqlParameter("@phone", SqlDbType.Int, 10);

        param[0].Value = firstName;
        param[1].Value = lastName;
        param[2].Value = emailAddress;
        param[3].Value = city;
        param[4].Value = phone;

        for (int i = 0; i < param.Length; i++)
        {
                cmd.Parameters.Add(param[i]);
        }

        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
        string msg = "Insert Error:";
        msg += ex.Message;
        throw new Exception(msg);
    }
    finally
    {
        conn.Close();
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    if (firstName.Text != null)
    {
        //call the method to execute insert to the database
        ExecuteInsert(firstName.Text,
                      lastName.Text,
                      emailAddress.Text,
                      city.Text,
                      phone.Text);
        Response.Write("Record was successfully added!");
        ClearControls(Page);
    }
    else
    {
        Response.Write("Please enter your name");
    }
}

public static void ClearControls(Control Parent)
{

    if (Parent is TextBox)
    { (Parent as TextBox).Text = string.Empty; }
    else
    {
        foreach (Control c in Parent.Controls)
            ClearControls(c);
    }
}

これを行うべき別の方法がある場合は、ぜひ聞きたいです。オンラインで良い情報を見つけることができないようです。

4

2 に答える 2

2

この行:

SqlParameter[] param = new SqlParameter[6];

あるべきです(配列が大きすぎて、最後のパラメーターを設定していません):

SqlParameter[] param = new SqlParameter[5];
于 2012-05-03T20:21:39.250 に答える
0

変化する

SqlParameter[] param = new SqlParameter[6];

SqlParameter[] param = new SqlParameter[5];

cmd.Parameters一時配列を作成せずに、パラメーターを直接追加できます。

于 2012-05-03T20:21:51.043 に答える