0

Возникает проблема при следующем запросе:

protected void ShowContact_Command(object sender, CommandEventArgs e)
{
    int rowInd = Convert.ToInt32(e.CommandArgument);
    conn = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MySQLString"].ConnectionString);
comm = new MySqlCommand("SELECT * FROM  persons p LEFT JOIN phones ph ON p.id = ph.person_id LEFT JOIN emails e ON p.id = e.person_id WHERE p.id = @id LIMIT 1", conn);
comm.Parameters.AddWithValue("@id", rowInd);
conn.Open();

MySqlDataReader reader = comm.ExecuteReader();
ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
while (reader.Read())
{

    FIO.Text = string.Format("{0} {1} {2}", reader.GetString("lastname"), reader.GetString("firstname"), reader.GetString("middlename"));
    COMPANY.Text = string.Format("{0}", reader.GetString("company"));
    POSITION.Text = string.Format("{0}", reader.GetString("position"));
    BIRTHDAY.Text = reader.GetDateTime("birthdate").ToString("MM/dd/yyyy"); ;
    TELEPHONES.Text = string.Format("{0}", reader.GetString("phone"));

}
reader.Close();
conn.Close();

}

введите сюда описание изображения Как только reader.GetString попадает null,возникает эта проблема. Как мне быть?

Возможно ли на уровне запроса, не брать пустые строки?

shatoidil
  • 1,492

2 Answers2

1

Вы можете добавить условие IS NOT NULL в SQL-запрос:

SELECT * 
FROM  persons p 
LEFT JOIN phones ph ON p.id = ph.person_id 
LEFT JOIN emails e ON p.id = e.person_id 
WHERE p.id = @id AND ph.phone IS NOT NULL
LIMIT 1

или проверять значение IsDBNull в DbDataReader:

if (!reader.IsDBNull(reader.GetOrdinal("phone")))
{
    TELEPHONES.Text = string.Format("{0}", reader.GetString("phone"));
}
pavelip
  • 5,670
0

У тебя в базе данных лежит null.

Зачем вообще тебе этот String.Format? Получай нормальный string так:

reader.GetString("phone") as string
Nick Volynkin
  • 34,094
Qwertiy
  • 123,725
  • А нельзя сразу на уровне запроса пустые строки не брать? – shatoidil Sep 28 '15 at 08:41
  • 1
    @shatoidil, можно всё. Но вот как и что ты хочешь получить, тебе придётся разобраться самому. – Qwertiy Sep 28 '15 at 08:59