// DataGridView数据加载按钮
private void btnLoad_Click(object sender, EventArgs e)
{
try
{
string strSql = "select * from studentgrade";
DataSet ds = dbhelper.getDataSet(strSql);
dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show("数据表格加载失败:" + ex.Message);
}
}
// DataGridView数据修改按钮
private void btnSaveUpdate_Click(object sender, EventArgs e)
{
try
{
string dbConnectionString = "Provider=MSDAORA;Data Source=XE;Password=TEST001;User ID=TEST";
using (OleDbConnection connection = new OleDbConnection(dbConnectionString))
{
string queryString = "select * from studentgrade";
OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, connection);
//adapter.SelectCommand = new OleDbCommand(queryString, connection);
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
connection.Open();
DataSet ds = dataGridView1.DataSource as DataSet;
int i = adapter.Update(ds);
connection.Close();
if (i > 0)
{
MessageBox.Show("数据更新成功!");
}
load();
}
}
catch (Exception ex)
{
MessageBox.Show("数据更新保存失败:" + ex.Message);
}
}
当使用类似上述代码编写程序时,就会出现 ”值不能为空 参数值:DataSet“ 这种错误,错误原因如下:
在使用 DataGridView数据加载按钮的单击方法函数btnLoad_Click()中,使用
dataGridView1.DataSource = ds.Tables[0];
DataTable的格式来填充DataGridView的数据源。
但是,在后续的 DataGridView数据修改按钮的单击方法函数btnSaveUpdate_Click()中,
DataSet ds = dataGridView1.DataSource as DataSet;
使用DataSet 的类型来转换已经被DataTable类型填充的DataGridView数据源,造成将dataGridView1使用as运算符转换为DataSet类型失效,执行过程中ds结果为null值,因而在执行
int i = adapter.Update(ds);
后,出现”值不能为空 参数值:DataSet“的错误异常。
应该将上述代码的btnLoad_Click()修改为下面代码:
// DataGridView数据加载按钮
private void btnLoad_Click(object sender, EventArgs e)
{
try
{
string strSql = "select * from studentgrade";
DataSet ds = dbhelper.getDataSet(strSql);
dataGridView1.DataSource = ds;
dataGridView1.DataMember = ds.Tables[0].TableName;
}
catch (Exception ex)
{
MessageBox.Show("数据表格加载失败:" + ex.Message);
}
}