Задача <DataTable>не содержит определения «Строки» - PullRequest
0 голосов
/ 22 марта 2019

У меня есть этот код, который получает данные из базы данных

public async Task<DataTable> SelectData(string stored_procedure, SqlParameter[] param)
    {
        SqlCommand sqlcmd = new SqlCommand();
        sqlcmd.CommandType = CommandType.StoredProcedure;
        sqlcmd.CommandText = stored_procedure;
        sqlcmd.Connection = sqlconnection;
        if (param != null)
        {
            sqlcmd.Parameters.AddRange(param);
        }

        SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
        DataTable dt = new DataTable();
        await Task.Run(()=> da.Fill(dt));
        return dt;
    }

, и я использую этот код для запуска хранимой процедуры

public async Task<DataTable> GetOrderManagementManagerEmail()
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        DataTable dt = new DataTable();
        dt =await DAL.SelectData("GetOrderManagementManagerEmail", null);
        DAL.Close();
        return dt;
    }

, затем я использую этот код по нажатию кнопки

private async void btnValidate_Click(object sender, EventArgs e)
    {
        int[] selectedRows = gridView2.GetSelectedRows();
        for (int i = 0; i < selectedRows.Length; i++)
        {
            DataRow rowGridView2 = (gridView2.GetRow(selectedRows[i]) as DataRowView).Row;
          await  stock.ValidateProjectNeed(Convert.ToInt32(rowGridView2["id"]), DateTime.Now);
        }
        if (XtraMessageBox.Show(Resources.addedSuccessfullyBonBesoinAndSendEmail, Resources.Validate, MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
        {


            Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
            Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
            Recipients oRecips = oMsg.Recipients;

            oMsg.To =await Task.Run(()=> stock.GetOrderManagementManagerEmail().Rows[0][0].ToString());
            oMsg.Subject = "Bon Besoin " ;
            oMsg.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
            oMsg.Display(false); //In order to display it in modal inspector change the argument to true
            oMsg.HTMLBody = "Un nouveau bon besoin a été ajouté " +
                "<br />" +  oMsg.HTMLBody; //Here comes your body;

        }
        gridControl2.DataSource = stock.GetProjectNeedsForValidate();
    }

но я получаю сообщение об ошибке в этой строке кода

oMsg.To =await Task.Run(()=> stock.GetOrderManagementManagerEmail().Rows[0][0].ToString());

Задача не содержит определения «Строки» и недоступен метод расширения «Строки», принимающий первый аргумент типа 'Задача 'может быть найдена (вам не хватает директивы using или ссылки на сборку?).прежде чем я использую асинхронный код работает нормально. Заранее спасибо.

1 Ответ

7 голосов
/ 22 марта 2019

Вы хотите:

var table = await stock.GetOrderManagementManagerEmail();
oMsg.To = table.Rows[0][0].ToString();

Не уверен, что происходит с await Task.Run(). Вы получаете Task обратно от вызова к GetOrderManagementManagerEmail() и затем пытаетесь получить строки из задачи, завернутые в ....

Упростите это. Кроме того, посмотрите, действительно ли вам нужно использовать таблицы / строки с индексаторами. Вы можете использовать:

var oMsg.To = table.AsEnumerable().Select(d => d.Field<string>("To")).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...