0

フォームからアクセス (mdb) に新しいデータを書き込む際に問題が発生しています。正常に機能するいくつかのフィールドを持つフォームがあり、テーブル内のデータを読み取ることができます。しかし、フォームを編集して新しい情報をデータベースに書き戻すことはできませんか? 以下のコードを参照してください。可能であれば、ソリューションを編集してください。この時点ですべてのオプションを使い果たしました。私はC#も初めてなので、すべてを正しく説明していないことをあらかじめお詫びします!

    public Form1()
    {
        InitializeComponent();
    }

    private void WObutton_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Michael\Documents\Visual Studio 2012\Projects\WorkOrderTKv2\WorkOrderTKv2TestAccessdb.mdb";

        conn.Open();

        OleDbCommand cmmd = new OleDbCommand("INSERT INTO TestFC (TestFC) Values(@Name)", conn);
        if (conn.State == ConnectionState.Open)
        {
            cmmd.Parameters.Add("@Name", OleDbType.VarWChar, 20).Value = Name;

            try
            {
                cmmd.ExecuteNonQuery();

                MessageBox.Show("DATA ADDED");

                conn.Close();
            }
            catch (OleDbException expe)
            {
                MessageBox.Show(expe.Message);
                conn.Close();
            }
        }
        else
        {
            MessageBox.Show("CON FAILED");
        }
    }
4

2 に答える 2

2

あなたの質問には多くの詳細が欠けているため、正しい答えを出すのは簡単ではありません. 特に、データベースに挿入する値をどこで取得するかわかりません。これらの値は、ある種の入力テキスト ボックスから読み取られ、データベース テーブルに渡されて挿入される必要があります。

ボタンをクリックしたときに呼び出される手順を修正するだけです(入力フォームを見て、不足している情報を追加する必要があるメモを付けてください)

private void WObutton_Click(object sender, EventArgs e)
{
    string cmdText = "INSERT INTO TestFC (WOID, WONum, WODesc, WOStatus, ISD) VALUES (?,?,?,?,?)";
    string cnString = @"Provider=Microsoft.ACE.OLEDB.12.0;
     Data Source=C:\Users\Michael\Documents\Visual Studio 2012\Projects\WorkOrderTKv2\WorkOrderTKv2TestAccessdb.mdb";
    using(OleDbConnection conn = new OleDbConnection(cnString))
    using(OleDbCommand cmmd = new OleDbCommand(cmdText, conn))
    {
        conn.Open();
        cmmd.Parameters.AddWithValue("@FirstParam", doubleValue);  // Need a double for field ID
        cmmd.Parameters.AddWithValue("@SeconParam", valueForWO);   // Need a string
        cmmd.Parameters.AddWithValue("@ThirdParam", valueForDESC);   
        cmmd.Parameters.AddWithValue("@FourthParam", valueForStatus);
        cmmd.Parameters.AddWithValue("@FifthParam", valueForISD);   

        try
        {
            cmmd.ExecuteNonQuery();
            MessageBox.Show("DATA ADDED");
            conn.Close();
        }
        catch (OleDbException expe)
        {
            MessageBox.Show(expe.Message);
        }
    }
}

私が言ったように、これはあなたのコードであるべきものの単なるモックアップです. 入力フォームからパラメータに渡す値を取得する必要があります

于 2014-02-11T23:04:10.993 に答える
0

insert ステートメントで、@Name を ? に置き換えることができます。すべてのパラメーターは、コマンドにパラメーターを追加した順序で適用されます。

public Form1()
{
    InitializeComponent();
}

private void WObutton_Click(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Michael\Documents\Visual Studio 2012\Projects\WorkOrderTKv2\WorkOrderTKv2TestAccessdb.mdb";

    conn.Open();

    OleDbCommand cmmd = new OleDbCommand("INSERT INTO TestFC (TestFC) Values(?)", conn);
    if (conn.State == ConnectionState.Open)
    {
        cmmd.Parameters.Add("@Name", OleDbType.VarWChar, 20).Value = Name;

        try
        {
            cmmd.ExecuteNonQuery();

            MessageBox.Show("DATA ADDED");

            conn.Close();
        }
        catch (OleDbException expe)
        {
            MessageBox.Show(expe.Message);
            conn.Close();
        }
    }
    else
    {
        MessageBox.Show("CON FAILED");
    }
}
于 2014-02-11T21:27:26.747 に答える