首页 > 解决方案 > 如何使用来自 API 的数据重构数据库连接方法 - c#

问题描述

我尝试使用来自 API 的数据更改我的数据库连接方法,并希望删除与数据库的连接。

这是我的数据库连接,我想用 API 中的数据替换数据库中的数据。

public IEnumerable<AlertLevel> DataBaseConnection(int mapCode)
    {
        string ConnectionString = "server=192.168.1.1;uid=user;port=3333;pwd=password;database=dbName;";
        MySqlConnection Conn = new MySqlConnection(ConnectionString);
        var listAlert = new List<AlertLevel>();

        try
        {
            Conn.Open();

            //replace(2) with mapCode
            string query = "CALL Get_Alert_levels_Station(" + mapCode + ");";
            MySqlCommand myCommand = new MySqlCommand(query, Conn);
            MySqlDataReader myReader;

            myReader = myCommand.ExecuteReader();

            try
            {
                while (myReader.Read())
                {
                    var currentData = new AlertLevel()
                    {

                        dateForecast = myReader.GetDateTime(0),
                        levelForecast = myReader.GetInt32(1)

                    };

                    listAlert.Add(currentData);
                }
            }
            finally
            {
                myReader.Close();
                Conn.Close();
            }
        }

        catch (Exception ex)
        {
            Console.WriteLine("Database Connection", "Not Connected ..." + Environment.NewLine + ex.ToString(), "OK");
        }

        return listAlert;
    }

这是我使用 API 数据的方法:

string GenerateRequestUri(string endpoint)
    {
        string requestUri = endpoint;
        requestUri += $"?id=16";

        return requestUri;
    }

    string GenerateRequestUriStations(string endpoint)
    {
        string requestUri = endpoint;
        requestUri += $"stations";

        return requestUri;
    }


    public WaterBindingData GetData()
    {
        var reusult = _restServiceData.GetWaterDataForecast(GenerateRequestUriStations(Constants.EndPoint), GenerateRequestUri(Constants.EndPoint));

        
        foreach (var item in reusult.WaterData.Ardaforecast[0].Items)
        {
            item.DateTimeForecast.ToString();
            item.AlertLevelForecast.ToString();
        }

        return reusult;

    }

我想将DataBaseConnection我的 API 逻辑放入方法中,并希望将 item.DateTimeForecast.ToString();anditem.AlertLevelForecast.ToString();放入AlertLevel,而且我不知道如何将动态变量放入GenerateRequestUri(string endpoint)requestUri += $"?id=16";16 必须是mapCode

标签: c#xamarin

解决方案


我假设你想做这样的事情

string GenerateRequestUri(string endpoint, mapCode)
{
    string requestUri = endpoint;
    requestUri += $"?id={mapCode}";

    return requestUri;
}

public IEnumerable<AlertLevel> GetDataFromAPI(int mapCode)
{
   var listAlert = new List<AlertLevel>();

   var reusult = _restServiceData.GetWaterDataForecast(GenerateRequestUriStations(Constants.EndPoint), GenerateRequestUri(Constants.EndPoint), mapCode);

        
        foreach (var item in reusult.WaterData.Ardaforecast[0].Items)
        {
            var currentData = new AlertLevel()
                    {
                        dateForecast = item.DateTimeForecast.ToString(),
                        levelForecast = item.AlertLevelForecast.ToString()
                    };

                    listAlert.Add(currentData);
        }

        return listAlert;

    }

推荐阅读