从datagridview更新数据库

时间:2011-12-28 08:26:35

标签: c# winforms ado.net datagridview oledb

在使用适配器编辑后,我已经搜索了很多关于将datagridview更新到数据库的信息。我提到了几个网站给了我类似的例子,如下所示。但是,我在button2_Click的第一行收到“ArgumentNullException未处理”错误。

我是编程新手,我被教会将适配器声明为全局,我做到了。为什么我仍然得到空值?任何帮助,将不胜感激。谢谢!

DataTable dt;
DataSet ds;
OleDbDataAdapter objAdapter = new OleDbDataAdapter();

public void button1_Click(object sender, EventArgs e)
{
    //Bind button
    string txt = textBox1.Text;

    string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Project.mdb";
    string strSqlStatement = string.Empty;
    strSqlStatement = "SELECT * FROM jiahe WHERE [User] = '" + txt + "'";
    OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);
    objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);
    DataSet ds = new DataSet();
    dataGridView1.DataSource = ds;
    objAdapter.Fill(ds);

    DataTable dt = ds.Tables[0];
    dataGridView1.DataSource = dt.DefaultView;           

    try
    {
        if (dt.Rows.Count == 1)
        {
            MessageBox.Show("Record found.");
        }
        else
        {
            if (dt.Rows.Count == 0)
            {
                MessageBox.Show("Invalid input!");
            }
        }
    }
    catch
    {
        MessageBox.Show("Error!");
    }
}

private void button2_Click(object sender, EventArgs e)
{
    objAdapter.Update(ds);
    dataGridView1.DataSource = ds;
}

2 个答案:

答案 0 :(得分:1)

我认为这只是不同范围内变量之间的混淆。您在第二个ds 中使用的button_click与用于填充网格的数据集不是相同的。将它们设为完全相同的实例,它很可能会起作用。

修改

这样足以写而不是

DataSet ds = new DataSet();
dataGridView1.DataSource = ds;
objAdapter.Fill(ds);
DataTable dt = ds.Tables[0];`

这个

ds = new DataSet();
dataGridView1.DataSource = ds;
objAdapter.Fill(ds);
DataTable dt = ds.Tables[0];`

答案 1 :(得分:0)

我遇到了同样的问题,我通过尝试这个来修复它:

DataSet ds = new DataSet();
dataGridView1.DataSource = ds;
objAdapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];