1

Microsoft Visual Studio 2012 を使用して、SQL Server のテーブルにデータを追加しようとしています。ただし、次のエラーが表示されます。

SQLException がユーザー コードによって取り消されました。
列名または指定された値の数がテーブル定義と一致しません。

これが私のコードです:

protected void btnAdd_Click(object sender, EventArgs e)
{
    con.Open(); // establish a database connection
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText =
        "INSERT INTO Products VALUES (@CatID, @Name, " +
        "@Image, @Description, @Price)";
    cmd.Parameters.Add("@CatID", SqlDbType.Int).Value =
        ddlCategories.SelectedItem.Value;
    cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value =
        txtName.Text;
    cmd.Parameters.Add("@Image", SqlDbType.NVarChar).Value =
        "http://localhost:12345/CAPSTONE/images/" + fuImage.FileName;
    cmd.Parameters.Add("@Description", SqlDbType.NVarChar).Value =
        txtDescription.Text;
    cmd.Parameters.Add("@Price", SqlDbType.Decimal).Value =
        txtPrice.Text;
    // saving the image file to your website folder 'Images'
    fuImage.SaveAs(Server.MapPath("~/images/" + fuImage.FileName));
    cmd.ExecuteNonQuery();
    con.Close();
    Response.Redirect("Default.aspx");
}
4

5 に答える 5

0

これは、テーブルに、ステートメントProductsで指定した列よりも多いまたは少ない列があることを意味します。VALUES

(@CatID, @Name, @Image, @Description, @Price)

sp_columns Products管理スタジオでクエリを実行すると、テーブル内のすべての列が一覧表示されます。

ただし、これらの値のみを挿入する場合は、代わりに次のクエリを実行する必要があります。

INSERT Products (CatID, Name, Image, Description, Price)

列名を指定せずにステートメントを指定するINSERTと、すべての列に値が入力されることが期待されます

于 2013-07-01T11:24:21.783 に答える
0

try catch block を使用し、catch で正確な問題を見つけます。何が欠けているかが表示されます。残りの可能性のある答えのほとんどは上記のとおりです。

于 2013-07-01T12:56:54.950 に答える
-4
    private void btninsert_Click(object sender, EventArgs e)
    {
        try
        {
            con.Open();
            cmd = new SqlCommand("insert into Empinfo values ('" + textBox1.Text + "''" + textBox2.Text + "''" + textBox3.Text + "''" + textBox4.Text + "')", con);

            cmd.ExecuteNonQuery();
            MessageBox.Show("Insert the record");
            cmd.Dispose();
        }
        catch(Exception e1)
            {
                MessageBox.Show("e1");
            }
            finally
        {

        con.Close();

    }
    }
于 2013-11-13T18:56:32.523 に答える