如何在C#代码背后调用SQL命令

时间:2019-07-31 20:11:51

标签: c# asp.net webforms odbc

我有一个到DSN的ODBC连接字符串,我们正在尝试打开连接并在数据库上运行SQL select语句。 SQL select语句采用1个参数CartID。尝试设置传递给select语句的参数值时,浏览器返回错误,提示我的对象引用未设置为对象的实例。

在这里我不确定我的变量是否找不到我的控件“购物车文本框”,或者我没有正确设置变量。

我已尝试更改要查找控件的位置,并尝试写入控制台以检查变量是否已正确设置。两种变化都没有运气。

带有按钮和文本框面板/文本框和按钮进行呼叫的ASPX页面标记:

<asp:Panel ID="ScanCartPanel" runat="server" DefaultButton="ScanCartButton">
    <dx:ASPxLabel ID="ScanCartTBLabel" runat="server" Text="Scan a Cart"></dx:ASPxLabel>
    <dx:ASPxTextBox ID="ScanCartTB" runat="server" Width="170px"></dx:ASPxTextBox>
    <dx:ASPxButton ID="ScanCartButton" runat="server" 
        Text="Scan Cart" ClientInstanceName="ScanCartID" 
        OnClick="SendScanCartID" AutoPostBack="False" UseSubmitBehavior="false"></dx:ASPxButton>
</asp:Panel>
<asp:Panel ID="NewCartPanel" runat="server">
    <div class="borderd">
        <p>This is a new cart!</p>
    </div>
</asp:Panel>

后面的C#代码:

protected void SendScanCartID(object sender, EventArgs args)
{
    HiddenField ntsh = (HiddenField)Master.FindControl("nothingToSeeHere");
    Console.WriteLine(ntsh);

    ASPxTextBox cartTextBox = (ASPxTextBox)Master.FindControl("ScanCartTB");

    using (OdbcConnection con = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectToPoweredPik"].ConnectionString))
    {
        OdbcCommand cmd = new OdbcCommand("select Cart_Setup from cart_header where cart_id = ?", con);
        OdbcParameter CartID = cmd.Parameters.Add("@cart_id", OdbcType.Char);
        CartID.Value = cartTextBox.Text;

        con.Open();
        OdbcDataReader reader = cmd.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                if (reader[0].ToString() != "S")
                {
                    NewCartPanel.Style.Add("display", "none");
                }
                else
                {
                    // show the panel
                }
            }
        }
    }
}

面板应始终显示,除非读取器的[0]值为S,则面板将隐藏。现在我无法执行读取器。

1 个答案:

答案 0 :(得分:0)

正如Steve的评论所暗示的那样,您可能找不到文本框控件。

您可以通过导航父控件来获取控件。

ContentPlaceHolder MainContent = FindControl("MainContent") as ContentPlaceHolder;
ContentPlaceHolder InnerContent = MainContent.FindControl("somecontrolname") as ContentPlaceHolder;
ASPxTextBoxcartTextBox = (ASPxTextBox)InnerContent.FindControl("ScanCartTB");

钻入适当的命名容器...

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-getting-started/master-pages/control-id-naming-in-content-pages-cs#drilling-into-the-appropriate-naming-container