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

在插入语句中,您可以将@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 回答