SQL-запрос получает ошибку «Указанное приведение неверно.» - PullRequest
0 голосов
/ 29 мая 2018

У меня есть примеры кодов, как показано ниже: -

public List<Announcement_User> announcementUser([FromBody]MyAnnouncementUser value)
{
    MySqlConnection conn = WebApiConfig.conn();
    MySqlCommand query = conn.CreateCommand();
    query.CommandText = "select a.title,a.description,a.date_created,ua.read,ua.announcement_id,ua.user_announcement_id from announcement a left join user_announcement ua on a.announcement_id = ua.announcement_id where ua.user_id = @user_id";

    query.Parameters.AddWithValue("@user_id", value.user_id);

    var prodWishlist = new List<Announcement_User>();

    try
    {
        conn.Open();
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        prodWishlist.Add(new Announcement_User(null, null,null, false, 0, 0, ex.ToString()));
    }

    MySqlDataReader fetch_query = query.ExecuteReader();

    while (fetch_query.Read())
    {
        prodWishlist.Add(new Announcement_User(fetch_query["title"].ToString(), fetch_query["description"].ToString(), fetch_query["date_created"].ToString(), (bool)fetch_query["read"], fetch_query.GetInt32(4), fetch_query.GetInt32(5), null));
    }
    conn.Close();
    return prodWishlist;
}

И я нажал ошибку, как показано ниже: -

«Сообщение»: «Произошла ошибка.»,

«ExceptionMessage»: «Указанное приведение недопустимо.»,

«ExceptionType»: «System.InvalidCastException»,

Теперь я подозреваю, что ошибка вызванаBOOL.Могу ли я узнать, как написать правильный путь для bool в (fetch_query.Read ())?Пожалуйста помоги.Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Я бы порекомендовал вам предварительно извлечь все значения, используя имя столбца вместо индекса столбца, и создать новый объект, когда требуемые параметры имеют значения:

string title = fetch_query["title"].ToString();
string description = fetch_query["description"].ToString();
// ...
object read = fetch_query["read"];
object integer1 = fetch_query[4];
// ...

// newest C# approach
if ( read != null && bool.TryParse(read.ToString(), out bool b_read) )

// old c# approach
bool b_read = false;
if ( read != null && bool.TryParse(read.ToString(), out b_read) )

Проверять каждое обязательное свойство

prodWishlist.Add(
    new Announcement_User(
        title,
        description, 
// ..
        b_read,
        i_integer1
//...
));
0 голосов
/ 29 мая 2018

Попробуйте использовать метод GetBoolean:

fetch_query.GetBoolean("read")
...