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

时间:2016-01-06 18:32:39

标签: c# sql

我正在尝试将数据从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);

}

2 个答案:

答案 0 :(得分:2)

全局变量。这是一个类级变量。请记住每个回发都使用页面类的新实例。每次调用新的服务器事件时,都会有新的回发,页面类的新实例以及整个页面生命周期的完整运行(包括Page_Load和朋友)。

对于网站,您应该将此数据放入会话中。你还应该修复那个可怕的糟糕的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;
        }
    }
}

答案 1 :(得分:0)

此外,如果您的消息没有显示,您实际上可以编写自己的方法以这种方式处理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>");
}