C# 通过3层删除gridview中的行时出错
对象引用未设置为对象的实例 这是我尝试删除时遇到的错误。。我的网格视图中的行 这是。。页面加载C# 通过3层删除gridview中的行时出错,c#,.net,3-tier,C#,.net,3 Tier,对象引用未设置为对象的实例 这是我尝试删除时遇到的错误。。我的网格视图中的行 这是。。页面加载 gvDetails.DataSource =myBl.DeleteAllCountry(int.Parse(gvDetails.SelectedRow.ToString())); 关于数据访问层 public DataTable DeleteCountry(int country_id) { DataTable dltcontry = new DataTable();
gvDetails.DataSource =myBl.DeleteAllCountry(int.Parse(gvDetails.SelectedRow.ToString()));
关于数据访问层
public DataTable DeleteCountry(int country_id)
{
DataTable dltcontry = new DataTable();
SqlConnection con = new SqlConnection(@"Data Source=a8-pc\sqlexpress;Integrated Security=True");
SqlDataAdapter da;
try
{
SqlCommand cmd = new SqlCommand();
cmd.connection= con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_DeleteCountry";
con.Open();
da = new SqlDataAdapter(cmd);
cmd.Parameters.AddWithValue("country_id", @country_id);
cmd.ExecuteNonQuery();
da.Fill(dltcontry);
con.Close();
}
在业务层,代码如下
public DataTable DeleteAllCountry(int country_id)
{
return mydtLayer.DeleteCountry(country_id);
}
首先要更正的是,您需要设置与命令的连接
cmd.Connection =con;
或在构造函数中,如下所示
SqlCommand command = new SqlCommand(
queryString, connection);
gvDetails.SelectedRow.cells("country_id").Text
另一个问题是您试图将选定的gvDetails.SelectedRow
转换为int值
在获取所选行的值之前,请检查gvDetails.selectedRows.Count
如果您有选择,您可以获得您所在国家/地区id列的单元格值,如下所示
SqlCommand command = new SqlCommand(
queryString, connection);
gvDetails.SelectedRow.cells("country_id").Text
现在,您可以使用
int.TryParse
将其转换为int值,如果成功,请发送到BL函数以删除记录请正确格式化您的问题并使用正确的英语..这不是SMS..您有用于删除的存储过程,您可以通过调用ExecuteOnQuery
来删除,但为什么再次使用相同的方法获取数据?请更清楚地说明您的问题。此异常看起来像NullPointer异常。通常,调试输出提供异常发生的行号,包括堆栈跟踪。使用该行号进一步调查错误。完成该操作。。。但是下一步怎么解决仍然得到那条线的错误呢?调试并检查哪一行和哪一个对象为nullgvDetails.DataSource=myBl.DeleteAllCountry(int.Parse(gvDetails.SelectedRow.ToString());您是否正在逐步检查代码以检查哪个变量的值为空?很难从中判断SelectedRow是否有值,或者它是否在该方法中抛出。