【问题标题】:error while deleting row in gridview via 3 tier通过 3 层删除 gridview 中的行时出错
【发布时间】:2013-06-06 21:08:03
【问题描述】:

对象引用未设置为对象的实例。

这是我在尝试从网格视图中删除 .. 行时遇到的错误

这是在 ..page_load 中

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);
  }

【问题讨论】:

  • 请正确格式化您的问题并使用正确的英文..这不是短信..
  • 你有删除的存储过程,你可以通过调用ExecuteNonQuery来删除,但为什么你又用同样的方法来获取数据?
  • 请更清楚地说明您的问题。此异常看起来像 NullPointer-Exception。通常调试输出提供异常发生的行号,包括堆栈跟踪。使用该行号进一步调查错误。

标签: c# .net 3-tier


【解决方案1】:

首先要纠正的是,您需要设置与您的命令的连接

cmd.Connection =con;

或者在下面的构造函数中

 SqlCommand command = new SqlCommand(
            queryString, connection);

另一个问题是您尝试将选定的gvDetails.SelectedRow 转换为 int 值

在获取所选行的值之前检查gvDetails.selectedRows.Count

如果您有选择,则可以获取您的 country_id 列的单元格值,如下所示

 gvDetails.SelectedRow.cells("country_id").Text

现在您可以使用 int.TryParse 将其转换为 int 值,如果成功则发送到您的 BL 函数以删除记录

【讨论】:

  • 做到了...但是接下来如何解决仍然出现该错误
  • 哪一行?调试并检查哪一行和哪个对象为空
  • gvDetails.DataSource =myBl.DeleteAllCountry(int.Parse(gvDetails.SelectedRow.ToString()));
  • 您是否正在单步执行您的代码以检查它是哪个变量具有空值?从这里很难判断 SelectedRow 是否有值,或者它是否被抛出在该方法中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
相关资源
最近更新 更多