Unity3D: доступ к данным MS SQL

202
04 ноября 2021, 12:40

Не являюсь специалистом по Unity, возникла задача "допиливания" кода.

Имеется приложение, написанное на Unity. Версий Unity было много, сейчас работаю с последней - Unity 2019.2.11f1.

Это приложение является частью системы, данные передаются в Unity-приложение из обычного .NET WPF-приложения с помощью BinaryWriter, а считываются, соответственно, через BinaryReader. Это работает и не вызывает вопросов. При этом библиотека работы с IPC реализована под .NET Framework 3.5.

Задача - получить в Unity поле из базы банных (MS SQL Server).

Как я понимаю, из-за кроссплатформенности Unity доступ к SqlConnection (ADO) или DataContext (LinqToSql) "ограничен". Или я неправ?

Вижу два пути решения:

  1. Передавать нужные мне данные через BinaryWriter - это повлечет за собой погружение в N библиотек, не хотелось бы.
  2. Реализовать прямой коннектор к базе данных из Unity.

При попытке реализации второго пути:

using (SqlConnection conn = new SqlConnection(connectionString))
{
      conn.Open();
      SqlCommand cmd = new SqlCommand(commandText);
      object result = cmd.ExecuteScalar();
      result.ToString();
}

Получаю ошибку Snix_Connect (provider: SNI_PN7, error: 25 - SNI_ERROR_25)\nSnix_Connect (provider: SNI_PN7, error: 25 - SNI_ERROR_25)"

Естественно, connectionString и commandTextверные, проверено через SSMS и на тест-контейнерах.

Возможно, дело в библиотеках mono?

Буду благодарен любым советам.

Заранее спасибо!

Answer 1

Я лишь однажды имел дело с sql и между базой и клиентом был php. С php до этого дела не имел, но он довольно лёгкий. И кажется через класс WWW обращался к php скрипту, после чего получаешь ответ переменной или json.

Нашёл свой первый пробный код.

< ?php
    $servername = "localhost";
    $username = "-----";
    $password = "-----";
    $databasename = "-----";
    $UserName = $_POST["UserName"];
    $UserPassword = $_POST["UserPassword"];
    $con = new mysqli($servername, $username, $password, $databasename);
    if ($con) {
        $dub = "SELECT UserID FROM Users WHERE UserName = '".$UserName."' AND UserPassword = '".$UserPassword."'";
        $result = mysqli_query($con, $dub);
        if ($result) {
            $rowscount = mysqli_num_rows($result);
            while ($row = mysqli_fetch_assoc($result)) {
                echo($row['UserID']);
            }
        } else {
            echo("Query Failed");
        }
    } else {
        //die ("Coonection Failed.".mysql_connect_error());
        echo("Coonection Failed");
    }
?>

C#

public string UserName;
public string UserPassword;
void Start () {
    StartCoroutine(UserLogin());
}
IEnumerator UserLogin () {
    Debug.Log("UserLogin");
    WWWForm LoginForm = new WWWForm();
    LoginForm.AddField("UserName", UserName);
    LoginForm.AddField("UserPassword", UserPassword);
    string Url = "http://-----.000webhostapp.com/LoginPC.php";
    WWW Log = new WWW(Url, LoginForm);
    yield return Log;
    if (Log.error == null) {
        string LogText = Log.text;
        if (LogText == "Connection Failed") {
            LoginFailed("Coonection Failed");
        } else if (LogText == "Query Failed") {
            LoginFailed("Query Failed");
        } else if (LogText == "Login Failed") {
            LoginFailed("Wrong Login or Password");
        } else {
            int uid = int.Parse(Log.text);
            LoginSuccess(uid);
        }
    } else {
        LoginFailed(Log.error);
        // 504 Gateway Time-out
    }
}
void LoginSuccess (int UserID) {
    Debug.Log("Login Success UserID:"+UserID);
}
void LoginFailed (string error) {
    Debug.Log("Login Error"+System.Environment.NewLine+error);
}
READ ALSO
Openweathermap не работает без VPN

Openweathermap не работает без VPN

Нужно создать приложение погды на C#В теории все просто, но на практике все туторы на С# котороые я находил используют openweathermap, а у меня на этом...

161
Тормозит dataGridView

Тормозит dataGridView

Поместил dataGridView в wiforms и создал таблицу 5 колонок / 1000 строк Первую колонку полностью заполнил данными string - строки из 10-15 символов, а остальные...

224
Selenium не видит элемент

Selenium не видит элемент

Что не так в Selenium или xpath ? Я использую xpath //span[@id='responseDate'], а проверка на наличие элемента приносит мне false, хотя в тоже время - я без проблем могу...

188