2010-11-23, 01:56
  #1
Medlem
simon556s avatar
Fick detta felet.
Invalid attempt to read when no data is present.
Problemet är bara att det finns data att läsa HasRow är tror när jag debuggar och FieldCount är 3.
Felet inträffar på ReturnValues = rdr[0].ToString();

här är koden
Kod:
        public void GetAllProgramFromOneUser(string UserName)
        {
            Guid UserID = GetUserID(UserName);
            SqlCommand SQLCom = new SqlCommand(@"SELECT Name, ProgramFileName, SourceCodeFileName " +
            "FROM Upload_program " +
            "WHERE UserID ='" + UserID + "'");
            SQLCom.Connection = DatabaseConnection;
            SQLCom.Connection.Open();
            string ReturnValues;
            SqlDataReader rdr = SQLCom.ExecuteReader();
            ReturnValues = rdr[0].ToString();
            SQLCom.Clone();
        }
Kod:
        private Guid GetUserID(string UserName)
        {
            //SQL command
            SqlCommand SQLCom = new SqlCommand("SELECT UserId " +
            "FROM aspnet_Users " +
            "WHERE (UserName = '" + UserName + "')");
            //get the Database connection.
            SQLCom.Connection = DatabaseConnection;
            SQLCom.Connection.Open();
            //Get the data.
            Guid UserID = new Guid();
            UserID = Guid.Parse(Convert.ToString(SQLCom.ExecuteScalar()));
            SQLCom.Connection.Close();
            return UserID;
        }
Citera
2010-11-23, 02:10
  #2
Medlem
LasseNorrs avatar
Fan också..trodde det var en rolig tråd när jag läste rubriken för fort.

Invalid attempts to read when no data is present.
Citera
2010-11-23, 11:09
  #3
Medlem
gadzooxs avatar
Du exekverar queryn och får en reader tillbaks, men du säger aldrig åt den att hämta nästa rad (första raden) från resultatet.
Kod:
SqlDataReader rdr = SQLCom.ExecuteReader();
if (rdr.Read())  // Kolla att det finns data (false if not), och stega fram readern dit.
{
            ReturnValues = rdr[0].ToString();
}


I ditt andra exempel genererar du en Guid för att sedan skriva över den med ett nytt värde:
Kod:
Guid UserID = new Guid();
UserID = Guid.Parse(Convert.ToString(SQLCom.ExecuteScalar()));
Varför inte bara Guid UserID = ....? Liten mikrooptimering där....
Fundera även lite på vad som händer om queryn inte returnerar någon data.


Sen undrar jag varför du klonar ditt SqlCommand på sista raden i ditt första exempel....
Och för guds skull, använd parameteriserade queries istället för att konkatenera strängar.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in