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