将datareader值传递给全局字符串c#
我试图将数据从datareader传递到全局变量,但由于某些奇怪的原因,当我发出警报以显示值时,它显示为空白。我只是没有正确地通过它吗将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
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注入问题,而不是懒惰,这是一个内部网站,所以我不害怕它,但我不应该懒惰!