доступ к базе данных Azure из функции Azure - PullRequest
1 голос
/ 27 июня 2019

Я хочу получить доступ к базе данных из Xamarin, и похоже, что хороший подход - это создать базу данных Azure (бесплатно на некоторое время)

Итак, я создал учетную запись в Azure, создал DBSQLServer иSQLDataBase, я установил имя администратора и пароль и открыл брандмауэр как часть процесса.

Затем я создал проект с функцией Azure в VS 2019, создал функцию, которая просто возвращает строку в OkObjectResult,и это работает (как посещение местного URL, так и общественности (после публикации)).Затем я установил пакет Nuget System.Data.SqlClient, а затем попытался подключиться к базе данных, используя имя пользователя и пароль администратора, вот так:

//did not use "new line"'s in the actual code, included them here for readability. 
using (SqlConnection conn = 
       new SqlConnection("
          Server=tcp:javrsserver.database.windows.net,
          1433;
          Initial Catalog=JaviRS;
          Persist Security Info=False;
          User ID={javirs};Password={-The one set in the azure portal-};
          MultipleActiveResultSets=False;
          Encrypt=True;
          TrustServerCertificate=False;
          Connection Timeout=30;"))
{
   try{
      conn.Open();
   }catch (Exception exc)
   { 
      //here I collect "Login failed for user {javirs}"
      //evntID : 18456
   }
}

Теоретически это просто неправильный пароль, но я уверен, что парольхорошоТак что я думаю, что некоторые странные вещи, связанные с управлением учетными записями пользователей, связаны с Windows ...

Любая подсказка ??

PS: Если есть простой способ получить простой sql в моем приложении Xamarin.Мне тоже интересно.эта вещь Azure - чрезмерная разработка для того, что мне нужно, и она не бесплатна навсегда ..


РЕДАКТИРОВАТЬ:

Я попытался подключиться с помощью SQLServver Object Explorer в Visual Studio, ввел те же учетные данныеЯ ввел в строку подключения, и это позволяет мне .. sqlServerObjectExlorer successfully logged in

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Я сделал это с помощью следующих шагов:

Скрипт Azure Sql:

CREATE TABLE AzureSqlTable(
    [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
    [FirstName] [nvarchar](max) NULL,
    [LastName] [nvarchar](max) NULL,
    [Email] [nvarchar](max) NULL,
)
GO

Класс функций:

  public class AzureFunctionV2SqlTableClass
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string DbOperationType { get; set; }

    }

Тело функции Azure:

[FunctionName("FunctionV2SqlConnectionExample")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            //Read Request Body
            var content = await new StreamReader(req.Body).ReadToEndAsync();

            //Extract Request Body and Parse To Class
            AzureFunctionV2SqlTableClass objFuncV2Sql = JsonConvert.DeserializeObject<AzureFunctionV2SqlTableClass>(content);

            // variable for global message.
            dynamic validationMessage;


           // Validate param because, I am checking here.

            if (string.IsNullOrEmpty(objFuncV2Sql.FirstName))
            {
                validationMessage = new OkObjectResult("First Name is required!");
                return (IActionResult)validationMessage;
            }
            if (string.IsNullOrEmpty(objFuncV2Sql.LastName))
            {
                validationMessage = new OkObjectResult("Last Name is required!");
                return (IActionResult)validationMessage;
            }

            if (string.IsNullOrEmpty(objFuncV2Sql.Email))
            {
                validationMessage = new OkObjectResult("Email is required!");
                return (IActionResult)validationMessage;
            }

            //Read database Connection

            var sqlConnection = "Data Source =tcp:sqlserverInstancenNameFromAzurePortal.database.windows.net,1433;Initial Catalog=YouDbName;Persist Security Info=False;User ID=ServerUserName;Password=ServerPass;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";

            //Sql Execution Message varible
            dynamic sqlExecutionMessage;
            //Define Db operation Type
            if (objFuncV2Sql.DbOperationType.ToUpper() == "INSERT")
            {
                using (SqlConnection conn = new SqlConnection(sqlConnection))
                {
                    conn.Open();
                    var text = "INSERT INTO AzureSqlTable VALUES ('" + objFuncV2Sql.FirstName + "', '" + objFuncV2Sql.LastName + "', '" + objFuncV2Sql.Email + "') ";

                    using (SqlCommand cmd = new SqlCommand(text, conn))
                    {
                        sqlExecutionMessage = await cmd.ExecuteNonQueryAsync();
                    }
                    conn.Close();
                }

                validationMessage = new OkObjectResult(sqlExecutionMessage + " ROW INSERTED");
                return (IActionResult)validationMessage;
            }
            //As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
            var result = new OkObjectResult("Operation Falid! No Relevant Command Found!");
            return result;
        }

Требуется ссылка:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Net.Http;
using System.Data.SqlClient;

Nuget Paackage Я использовал:

System.Data.SqlClient(4.6.1)

Скачать из менеджера пакетов Nuget. Смотрите снимок экрана ниже:

enter image description here

Образец сообщения:

{
    "FirstName": "Kiron New Sql FunctionV2",
    "LastName":"Kiron New Local Sql",
    "Email":"KironTest@microsoft.com",
    "DbOperationType":"INSERT"
}

Точка для запоминания:

  1. Следуйте тому, что я точно пытался продемонстрировать здесь, без инжиниринга перед тем как запустить его

  2. Просто обновите строку подключения с помощью Azure Sql Server Credentials

  3. Избавьтесь от {} от пароля, поскольку я не указал его в моем примере Кроме того, при копировании строки подключения с портала в {password} просто опустить {}
  4. Если ваша функция обнаружила ошибку Azure Portal SQL Db относительно вашего IP-адреса клиента. В этом случае просто добавьте ваш клиент IP, как показано ниже:

Шаг: 1

enter image description here

Шаг: 2 enter image description here

Примечание: Я только что попытался показать операцию вставки. Надеюсь, это будет работать соответственно.

0 голосов
/ 27 июня 2019

В сообщении об ошибке говорится: «Не удалось войти в систему для пользователя {javirs}» *

Это указывает на то, что вы включили {} в свое имя пользователя (и, вероятно, в свой пароль. Удаление {и the} сделаеттрюк.

Теперь работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...