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是否有值,或者它是否在该方法中抛出。