将datareader值传递给全局字符串c#

将datareader值传递给全局字符串c#,c#,sql,C#,Sql,我试图将数据从datareader传递到全局变量,但由于某些奇怪的原因,当我发出警报以显示值时,它显示为空白。我只是没有正确地通过它吗 using (SqlConnection connection = new SqlConnection(SQL)) { connection.Open(); using (SqlCommand command = new SqlCommand("SELECT TOP 1 Number FROM T

我试图将数据从datareader传递到全局变量,但由于某些奇怪的原因,当我发出警报以显示值时,它显示为空白。我只是没有正确地通过它吗

        using (SqlConnection connection = new SqlConnection(SQL))
        {
        connection.Open();

        using (SqlCommand command = new SqlCommand("SELECT TOP 1 Number FROM TestTable.dbo.users WHERE LoginName ='" + viewerUserNameTxtBox.Text + "'", connection))
        using (SqlDataReader reader = command.ExecuteReader())
            {
             while (reader.Read())
                {
                    string test = reader.GetString(0);
                    viewerNumber = test;
                 }
            }
        }
所以我有一个全局变量:

public partial class _Default : System.Web.UI.Page
{

/* Global Variables Start */
string viewerNumber = "";
以下是我显示警报的方式:

        protected void variableCheck_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('" + viewerNumber + "');", true);

}

这不是一个全局变量。这是一个类级变量。请记住,每个回发都使用page类的一个新实例。任何时候调用新服务器事件,都是一个新的回发、page类的新实例,以及整个页面生命周期(包括page_Load和friends)的完整运行

对于网站,您应该将此数据放在会话中。您还应该修复可怕的sql注入问题:

using (var connection = new SqlConnection(SQL))
using (var command = new SqlCommand("SELECT TOP 1 Number FROM TestTable.dbo.users WHERE LoginName = @UserName;", connection))
{
    command.Parameters.Add("@UserName", SqlDbType.VarChar, 25).Value = viewerUserNameTxtBox.Text
    connection.Open();

    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            string test = reader.GetString(0);
            Session["viewerNumber"] = test;
        }
    }
}

此外,如果您的消息没有显示,您可以编写自己的方法,以这种方式处理Javascript警报。。另一种替代方法是通过传递ScriptManager

public static void ShowClientMessageDlg(string msg, string aValue, string redirect = "")
{
    string msgFormat;
    msgFormat = string.Format(" {0}", aValue);
    msg = msg + msgFormat;
    HttpContext.Current.Response.Write("<script type='text/javascript'>alert('" + msg + "');</script>");
}
public static void ShowClientMessageDlg(string msg,string aValue,string redirect=”“)
{
字符串msgFormat;
msgFormat=string.Format(“{0}”,aValue);
msg=msg+msg格式;
HttpContext.Current.Response.Write(“警报(“+msg+”);”);
}

分配它很好,这就是
variable=assignment
所做的。设置断点,逐步检查代码并检查分配是否实际执行。此外,请阅读并显示所有相关代码,即您在何处调用上述代码以及如何显示警报。仅供参考,它也不是一个全局变量。这段代码极易受到sql注入攻击。这简直是乞求被黑客攻击。你是如何显示警报的?也发布代码。我刚刚发布了如何显示代码。此代码正在内部使用,因此不必担心sql注入攻击。Web是无状态的,因此您需要维护状态。谢谢!我将修复SQL注入问题,而不是懒惰,这是一个内部网站,所以我不害怕它,但我不应该懒惰!