【问题标题】:getting null value when getting the datatable value to the textbox in static web method在静态Web方法中将数据表值获取到文本框时获取空值
【发布时间】:2017-12-07 18:53:24
【问题描述】:

当文本框通过静态方法中的数据表对象获取数据时,它显示空值(即显示错误:对象引用未设置为对象的实例)。但是当我当时做调试模式时,它会显示数据表中的数据,所以我很困惑它是如何在文本框中获取空值的。

这是我的代码

[WebMethod]
    public static void GetCnorGSTNo(string Param1)
    {
        Page page = (Page)HttpContext.Current.Handler;
        TextBox cnorGST = (TextBox)page.FindControl("txtbx_cnortin");

        DataAccess clsObjDataAccess = new DataAccess();
        string qrySelCnorGtinNo = "select TinNo1 from CnorMaster where CnorName = '" + Param1 + "'";
        DataTable dtqrySelCnorGtinNo = new DataTable();
        dtqrySelCnorGtinNo = clsObjDataAccess.GetDataTable(qrySelCnorGtinNo);
        if (dtqrySelCnorGtinNo.Rows.Count > 0)
        {
            cnorGST.Text = dtqrySelCnorGtinNo.Rows[0]["TinNo1"].ToString();
        }
    }

当我在调试模式下进行时

"dtqrySelCnorGtinNo.Rows[0]["TinNo1"].ToString();"

这一行显示数据

但是当这个数据被提供给文本框时,即cnorGST.Text,它显示一个错误,即对象引用未设置为对象的实例。

请帮我解决这个问题。

谢谢。

【问题讨论】:

  • Web 方法在页面生命周期的上下文之外运行,因此服务器上不存在控件。您无法访问它们。 stackoverflow.com/questions/31514188/…
  • 有什么我可以访问的控件吗?因为无论数据表中的值是什么,我都想显示文本框。那我该怎么做呢?
  • 你可以在web方法中访问数据库,只需在文本框中返回你想要显示的值。然后从客户端通过 javascript 分配此文本。

标签: c# asp.net datatable webmethod


【解决方案1】:

网络方法在页面生命周期的上下文之外运行,因此服务器上不存在控件。 You cannot access them

但是您是从客户端方法调用此 webemethod。在那里您可以分配文本。所以在webmethod中从数据库中获取值并返回:

[WebMethod]
public static string GetCnorGSTNo(string Param1)
{
    DataAccess clsObjDataAccess = new DataAccess();
    string qrySelCnorGtinNo = "select TinNo1 from CnorMaster where CnorName = '" + Param1 + "'";
    return clsObjDataAccess.GetDataTable(qrySelCnorGtinNo).AsEnumerable()
       .ElementAtOrDefault(0)?.Field<string>("TinNo1");
}

调用此 webmethod 的 javascript 方法将返回的文本分配给 txtbx_cnortin.Value

先生,您能给我这个参数化查询演示吗?我正在使用 sqlserver2005

当然

[WebMethod]
public static string GetCnorGSTNo(string cnorName)
{
    using (var con = new SqlConnection("connection-string here"))
    using (var cmd = new SqlCommand("select TinNo1 from CnorMaster where CnorName = @CnorName", con))
    {
        cmd.Parameters.Add("@CnorName", SqlDbType.NVarChar).Value = cnorName;
        con.Open();
        object val = cmd.ExecuteScalar();
        return val == DBNull.Value ? "" : (string)val;
    }
}

由于我不知道TinNo1-column 的数据库类型,您可能需要更改(string)val

【讨论】:

  • @karan:请注意,您应该使用参数化查询而不是字符串连接。否则你(非常)容易受到 sql 注入攻击。
  • 先生,你能给我这个参数化查询演示吗?
  • sqlserver2005, 2008r2
  • 先生,您的意思是说我想做存储过程之类的参数化查询.....对吗?
  • 如何在参数化查询中选择多个字段。例如,如果我想执行“从 CnorMaster 中选择 TinNo1,TinNo2,其中 CnorName = @CnorName”之类的查询,那么我该如何返回 json 中的值? @蒂姆施梅尔特
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
相关资源
最近更新 更多