При чтении из SQL базы данных сервера в ASP.NET значения не выводятся в txtField - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь просто прочитать данные из моей SQL базы данных сервера и ввести их в текстовые поля веб-формы.

Я не могу понять, чего мне не хватает, но все компилируется и работает но мои текстовые поля остаются пустыми.

protected void Page_Load(object sender, EventArgs e)
{
        String index = Request.Form["indexTb"];

        string constr = ConfigurationManager.ConnectionStrings["TravelLogConnectionString2"].ConnectionString;
        SqlConnection con = new SqlConnection(constr);

        string selectSql = "SELECT Location, Date, Message FROM EntryLogs WHERE ID='" + Convert.ToInt32(index) + "'";

        SqlCommand com = new SqlCommand(selectSql, con);

        try
        {
            con.Open();

            using (SqlDataReader reader2 = com.ExecuteReader())
            {
                while (reader2.Read())
                {
                    reader2.Read();
                    LocTb.Text = (reader2["Location"].ToString());
                    DateTb.Text = (reader2["Date"].ToString());
                    MessTb.Text = (reader2["Message"].ToString());                        
                }

                reader2.Close();
                reader2.Dispose();
            }
        }
        finally
        {
            con.Close();
        }
}

1 Ответ

0 голосов
/ 21 февраля 2020

Вы вызываете reader2.Read(); дважды - один раз в while l oop, один раз чуть ниже:

while (reader2.Read())
{
    reader2.Read();  // <=== WHY call .Read() a second time ?!?!!?!

    LocTb.Text = (reader2["Location"].ToString());
    DateTb.Text = (reader2["Date"].ToString());
    MessTb.Text = (reader2["Message"].ToString());                        
}

Это и не нужно, и может привести к тому, что результаты не будут возвращены.

Если ваш запрос возвращает только одну строку, .Read() в while l oop прочитает эту строку и вернет ее, но затем следующая строка сделает еще одну Read(), которая не вернет любые данные (поскольку первая и единственная строка уже прочитана).

Просто удалите этот ненужный второй вызов .Read(), и я уверен, что ваши данные начнут появляться!

И исправьте это явное SQL внедрение - используйте параметризованные запросы! , как следует всегда делайте в любом случае!

    string selectSql = "SELECT Location, Date, Message FROM EntryLogs WHERE ID = @Id;";

    SqlCommand com = new SqlCommand(selectSql, con);
    com.Parameters.Add("@Id", SqlDbType.Int).Value = Convert.ToInt32(index);

    try
    {
        con.Open();

        using (SqlDataReader reader2 = com.ExecuteReader())
        {
            while (reader2.Read())
            {
                // REMOVE THIS reader2.Read();
                LocTb.Text = (reader2["Location"].ToString());
                DateTb.Text = (reader2["Date"].ToString());
                MessTb.Text = (reader2["Message"].ToString());                        
            }

            reader2.Close();
            reader2.Dispose();
        }
    }
    finally
    {
        con.Close();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...