Как мне заставить бот-фреймворк-бот отправлять обратно ячейку базы данных, если я ввожу параметр поиска? - PullRequest
0 голосов
/ 07 июня 2018

Я хочу, чтобы бот в среде ботов Microsoft, c #, отправлял обратно любимое значение цвета человека, если вы отправляете имя.Данные хранятся в базе данных на Azure.Связь в порядке, проблема в том, что как только я пытаюсь реализовать какой-либо объект чтения, он выдает ошибку кода 500.

Пример:

пользователь: счет

бот: любимый цвет счета - красный!Хотите узнать чей-либо любимый цвет?

Поэтому логика должна принимать пользовательский ввод счета, использовать его в качестве входного параметра в выражении SQL, а затем читать возвращаемое значение и возвращать его пользователю.через бот.

Мой класс MessagesController.cs не отличается от шаблона бота, я попытался поместить всю логику в RootDialog.cs, который приведен ниже:

using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;
using System.Data.SqlClient;

namespace ColourBot.Dialogs
{
[Serializable]
public class RootDialog : IDialog<object>
{

    public Task StartAsync(IDialogContext context)
    {

        context.Wait(MessageReceivedAsync);

        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;
        string result10; 



        var cb = new SqlConnectionStringBuilder();
        cb.DataSource = "my_server.database.windows.net";
        cb.UserID = "user_id";
        cb.Password = "pass_word";
        cb.InitialCatalog = "ColourDB";

        using (var connection = new SqlConnection(cb.ConnectionString))
        {
            connection.Open();

            SqlCommand command = new SqlCommand("SELECT Colour FROM People Where Name=ed", connection);

            result10 = Submit_1_Tsql_SelectEmployees(connection);

            await context.PostAsync(

            $"The name you sent was {activity.Text}, their favourite colour is {result10}!");

            context.Wait(MessageReceivedAsync);

            string Build_1_Tsql_SelectEmployees()
            {
                return $@"SELECT
                                 Colour
                          FROM
                                 People
                          Where
                                  Name={activity.Text};";
            }
            string Submit_1_Tsql_SelectEmployees(SqlConnection conn)
            {
                string tsql = Build_1_Tsql_SelectEmployees();
                string nameString = "";

                using (var command = new SqlCommand(tsql, conn))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var nameReturned = reader.GetName(0);
                            nameString = nameReturned.ToString();

                        }
                    }
                }
                return nameString;
            }
        }
    }
}

}

1 Ответ

0 голосов
/ 08 июня 2018

Я создал бот-приложение для проверки предоставленного вами кода и отладки бот-приложения с помощью Bot Framework Emulator . Я обнаружил, что исключение вызвано отсутствием одинарных кавычек вокруг значения Name={activity.Text}.

Вы можете изменить queryString для добавления одинарных кавычек:

string Build_1_Tsql_SelectEmployees()
{
    return $@"SELECT Colour FROM People Where [Name]='{activity.Text}';";
}

Кроме того, чтобы показать любимый цвет пользователя, вы можете использовать следующий код для возврата данных, полученных при вызове reader.GetName(0) чтобы вернуть имя столбца.

using (SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        //var nameReturned = reader.GetName(0);
        //nameString = nameReturned.ToString();
        nameString = reader[0].ToString();
    }
}

Результат теста:

enter image description here

...