Я хочу, чтобы бот в среде ботов 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;
}
}
}
}
}