今天写一个添加语句时,出现了奇怪的问题:
string sql = "insert into dept(id,name) values(@id,@name)";
SqlDataAdapter adpt = new SqlDataAdapter(sql,con);
adpt.InsertCommand.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
adpt.InsertCommand.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,30));
adpt.InsertCommand.Parameters["@id"].Value = txtId.Text;
adpt.InsertCommand.Parameters["@name"].Value = txtName.Text;
DataSet ds = new DataSet();
con.Open();
try
{
adpt.Fill(ds,"user");
string str = "添加成功";
Response.Write("<script>alert('" + str + "');</script>");
DataGrid1.DataSource = ds.Tables["user"].DefaultView;
/*
请注意这里,测试的时候我写了3种写法,报错一样,出现的奇怪的地方
3种写法如下:DataGrid1.DataSource = ds.Tables["user"].DefaultView;
DataGrid1.DataSource = ds.Tables["user"];
DataGrid1.DataSource = ds
出错信息如下:
出错提示:未将对象引用设置到对象的实例。
行 59:string sql = "insert into dept(id,name) values(@id,@name)";行 60:SqlDataAdapter adpt = new SqlDataAdapter(sql,con);
行 61:adpt.InsertCommand.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
行 62:adpt.InsertCommand.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,30));
行 63:adpt.InsertCommand.Parameters["@id"].Value = txtId.Text;
记录都没有插入数据库
*/
DataGrid1.DataBind();
}catch(Exception ex)
{
throw ex;
string str = "添加失败";
Response.Write("<script>alert('" + str + "');</script>");
}
finally
{
con.Close();
}后来又把程序修改如下,出现了奇怪的问题
string sql = "insert into dept(id,name) values(@id,@name)";
SqlCommand cmd = new SqlCommand(sql,con);
cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
cmd.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,30));
cmd.Parameters["@id"].Value = txtId.Text;
cmd.Parameters["@name"].Value = txtName.Text;
SqlDataAdapter adpt = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
con.Open();
try
{
adpt.Fill(ds,"user");
string str = "添加成功";
Response.Write("<script>alert('" + str + "');</script>");
DataGrid1.DataSource = ds;
/*
请注意这里,测试的时候我用了3种写法,结果提示2种不同的错误,1个正常运行
DataGrid1.DataSource = ds;
出错信息:IListSource 不包含任何数据源。
行 76: catch(Exception ex)
行 77: {
行 78: throw ex;
行 79: string str = "添加失败";
行 80: Response.Write("<script>alert('" + str + "');</script>");DataGrid1.DataSource = ds.Tables["user"].DefaultView;
出错信息:未将对象引用设置到对象的实例。
行 76: catch(Exception ex)
行 77: {
行 78: throw ex;
行 79: string str = "添加失败";
行 80: Response.Write("<script>alert('" + str + "');</script>");DataGrid1.DataSource = ds.Tables[“user”]; 成功运行
然而,无论提示出错还是成功运行,记录都插入数据库了
*/
DataGrid1.DataBind();
}
catch(Exception ex)
{
throw ex;
string str = "添加失败";
Response.Write("<script>alert('" + str + "');</script>");
}
finally
{
con.Close();
}
我开始以为,这两个程序应该是等效的,但是结果却……,为什么会出现这种奇怪的问题,请大侠们解释,谢谢!
string sql = "insert into dept(id,name) values(@id,@name)";
SqlDataAdapter adpt = new SqlDataAdapter(sql,con);
adpt.InsertCommand.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
adpt.InsertCommand.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,30));
adpt.InsertCommand.Parameters["@id"].Value = txtId.Text;
adpt.InsertCommand.Parameters["@name"].Value = txtName.Text;
DataSet ds = new DataSet();
con.Open();
try
{
adpt.Fill(ds,"user");
string str = "添加成功";
Response.Write("<script>alert('" + str + "');</script>");
DataGrid1.DataSource = ds.Tables["user"].DefaultView;
/*
请注意这里,测试的时候我写了3种写法,报错一样,出现的奇怪的地方
3种写法如下:DataGrid1.DataSource = ds.Tables["user"].DefaultView;
DataGrid1.DataSource = ds.Tables["user"];
DataGrid1.DataSource = ds
出错信息如下:
出错提示:未将对象引用设置到对象的实例。
行 59:string sql = "insert into dept(id,name) values(@id,@name)";行 60:SqlDataAdapter adpt = new SqlDataAdapter(sql,con);
行 61:adpt.InsertCommand.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
行 62:adpt.InsertCommand.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,30));
行 63:adpt.InsertCommand.Parameters["@id"].Value = txtId.Text;
记录都没有插入数据库
*/
DataGrid1.DataBind();
}catch(Exception ex)
{
throw ex;
string str = "添加失败";
Response.Write("<script>alert('" + str + "');</script>");
}
finally
{
con.Close();
}后来又把程序修改如下,出现了奇怪的问题
string sql = "insert into dept(id,name) values(@id,@name)";
SqlCommand cmd = new SqlCommand(sql,con);
cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
cmd.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,30));
cmd.Parameters["@id"].Value = txtId.Text;
cmd.Parameters["@name"].Value = txtName.Text;
SqlDataAdapter adpt = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
con.Open();
try
{
adpt.Fill(ds,"user");
string str = "添加成功";
Response.Write("<script>alert('" + str + "');</script>");
DataGrid1.DataSource = ds;
/*
请注意这里,测试的时候我用了3种写法,结果提示2种不同的错误,1个正常运行
DataGrid1.DataSource = ds;
出错信息:IListSource 不包含任何数据源。
行 76: catch(Exception ex)
行 77: {
行 78: throw ex;
行 79: string str = "添加失败";
行 80: Response.Write("<script>alert('" + str + "');</script>");DataGrid1.DataSource = ds.Tables["user"].DefaultView;
出错信息:未将对象引用设置到对象的实例。
行 76: catch(Exception ex)
行 77: {
行 78: throw ex;
行 79: string str = "添加失败";
行 80: Response.Write("<script>alert('" + str + "');</script>");DataGrid1.DataSource = ds.Tables[“user”]; 成功运行
然而,无论提示出错还是成功运行,记录都插入数据库了
*/
DataGrid1.DataBind();
}
catch(Exception ex)
{
throw ex;
string str = "添加失败";
Response.Write("<script>alert('" + str + "');</script>");
}
finally
{
con.Close();
}
我开始以为,这两个程序应该是等效的,但是结果却……,为什么会出现这种奇怪的问题,请大侠们解释,谢谢!
第二种时你把SQL语句做为selectcommand对像传给SqlDataAdapter 。
所以FILL有数据,但FILL没有结果也是错的。
SqlDataAdapter adpt = new SqlDataAdapter(sql,con);
adpt.InsertCommand.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
------------------------------------------------------------
SqlCommand cmd = new SqlCommand(sql,con);
cmd.Parameters.Add(new SqlParameter("@id",SqlDbType.Char,10));
SqlDataAdapter adpt = new SqlDataAdapter(cmd);
还有就是为什么第二种写法,就算提示出错了,记录还是插入数据库了