Не удается преобразовать тип ‘WebMatrix.Data.DynamicRecord’ в ‘int’

#c# #sql #webmatrix

#c# #sql #webmatrix

Вопрос:

Не удается преобразовать тип ‘WebMatrix.Data.DynamicRecord’ в ‘int’ исключение появляется, когда я пытаюсь вывести значение метода QueryValue в int?

 public class SaveCustomerData : IDisposable
{
private readonly string _connectionString;
private readonly Database _db;

public SaveCustomerData(string connectionString)
{
    _connectionString = connectionString;
    _db = Database.Open(connectionString);
}

public void Insert(string fname, string lname, string phone, string cellno, DateTime dob, string gender, string address, string address2, string creditno, string city, string postalcode, string email) {
    var uid = Convert.ToInt32(_db.QuerySingle("SELECT UserID FROM UserProfile WHERE Email=@0",email));



    _db.Execute("INSERT INTO Customer_Table (customer_fname, customer_lname, customer_phone, customer_mobile, customer_dob, customer_gender, customer_address, customer_address2, customer_credit_no, customer_city, customer_postal, UserID) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12)",
        fname, lname, phone, cellno, dob, gender, address, address2, creditno, city, postalcode, uid);
  

Ответ №1:

Вы должны использовать это:

 _db.QuerySingle("SELECT UserID FROM UserProfile WHERE Email=@0",email)
   .Item["UserID"];
  

для того, чтобы вы получили возвращаемое значение UserID . Вы получили ошибку, которую вы опубликовали в своем вопросе, потому что ваш запрос возвращает объект типа WebMatrix.Data.DynamicRecord , который

Представляет запись данных с использованием пользовательского дескриптора типа и возможностей среды выполнения динамического языка (DLR).

как указано здесь, а не значение UserID .

Чтобы получить значение определенного столбца в записи, которое возвращается после выполнения _db.QuerySingle(...) , у вас есть два варианта:

  • Item[Int32] ,

Возвращает значение столбца в экземпляре DynamicRecord с использованием указанного индекса.

и

  • Item[string] ,

Возвращает значение столбца в экземпляре DynamicRecord с использованием указанного имени.

Комментарии:

1. Я только что обновил свой пост. Вы можете принять значение, используя [0], которое вернет вам значение в столбце с индексом 0, или вы можете получить значение, используя имя столбца.