No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aplicación para Table Storage

15/22
Recursos

¿Cómo solucionamos los errores de espacio de nombres en Visual Studio?

Al programar a menudo te encuentras con errores que parecen desconcertantes al principio, pero que tienen soluciones simples una vez que comprendes el contexto. En este caso, el instructor encontró dificultades con espacios de nombres que faltaban en un proyecto de Visual Studio, lo que interrumpía la conexión deseada con Cosmos DB para trabajar con tablas.

  1. Identificación del problema: Existen dos errores relacionados con la ausencia del espacio de nombres para Azur y Klaus Table.

  2. Solución con el espacio de nombres adecuado:

    • Microsoft.Azure.Cosmos.Table: Primero, navega al explorador de paquetes y localiza el paquete correcto que contiene el espacio de nombres Cosmos.Table. Se sugiere utilizar una versión estable, por ejemplo, 1.0.4.
    • Usar la referencia del paquete: Añadir esta referencia al proyecto solucionará ambos errores.

¿Qué hacer cuando aparecen nuevos errores tras compilar la solución?

Regresar a nuestro entorno de desarrollo y enfrentar nuevos errores es parte del proceso. Aquí se presentan algunos pasos para abordarlos:

  1. Errores de directorios y métodos que no retornan valores:

    • Asegúrate de incluir System.IO para problemas relacionados con directorios.
    • Posponer la solución de métodos que no devuelven un valor hasta haber completado todo el método planificado puede ser conveniente, siempre y cuando sea aceptable en el contexto.
  2. Uso de métodos y variables en Visual Studio:

    • Variables CloudStorageAccount: Crear una variable de tipo CloudStorageAccount permite gestionar de manera efectiva las llaves de conexión.
    • Crear un cliente: Usar métodos como TableClientConfiguration para establecer el cliente entre la aplicación y Cosmos.
  3. Crear o validar la existencia de tablas:

    • Método asíncrono: Un método async puede ser implementado con el uso de palabras clave como await.
    • Mensajes de consola: Confirmar las acciones realizadas con mensajes claros para seguimiento, por ejemplo, si una tabla existe o si necesita ser creada.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new TableClientConfiguration());
CloudTable table = tableClient.GetTableReference(tableName);

await table.CreateIfNotExistsAsync();
Console.WriteLine($"Tabla {tableName} creada o ya existía.");

¿Cómo invocar el método desde Main?

Una vez que todo esté en su lugar, el paso final es invocar el método previamente configurado desde el punto de entrada principal de tu aplicación:

  1. Invocar CreateTableAsync:
    • Pasa los parámetros necesarios: el nombre de la tabla y la cadena de conexión.
    • Utiliza await para garantizar que el flujo de la aplicación espere a que el método se ejecute completamente.
await CreateTableAsync(tableName, connectionString);
Console.WriteLine("Finalizado.");

Ahora puedes ejecutar tu aplicación y observar en la consola confirmaciones de que tu tabla ha sido creada o ya existía. Aunque el proceso de solucionar errores puede parecer arduo, la satisfacción de ver tu aplicación en funcionamiento hace que el esfuerzo valga la pena. ¡Sigue esforzándote y explorando!

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

A día de hoy (mayo de 2022) se puede seguir la clase, pero el producto es ligeramente diferente (ya no aparece como parte del Azure Storage) y el nuget (ya deprecado) a instalar se llama:
“WindowsAzure.Storage”.

El paquete a agregar en el archivo .csproj sería:

<PackageReference Include=“WindowsAzure.Storage” Version=“9.3.3” />
El Program.cs en .NET 6 quedaría algo así:

using Microsoft.Extensions.Configuration;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

var builder = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("appsettings.json");

IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json", true, true).Build();

string connString = config["ConnectionString"];

var table = await CreateTable("testingTable001", connString);

static async Task<CloudTable> CreateTable(string tableName, string connString)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connString);
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

    CloudTable table = tableClient.GetTableReference(tableName);

    if (await table.CreateIfNotExistsAsync())
    {
        Console.WriteLine($"Tabla creada: {tableName}");
    }
    else
    {
        Console.WriteLine("La tabla ya existe");
    }

    Console.WriteLine("Listo");
    return table;
}

Paquete instalado:

  • Microsoft.Azure.Cosmos.Table:
    <PackageReference Include=“Microsoft.Azure.Cosmos.Table” Version=“1.0.5” />

-Version de netcore 3.1

<PackageReference Include=“Microsoft.Azure.Cosmos.Table” Version=“1.0.7” />

Estoy con este error:

PS D:\cursoPlatzi\platzi curso Paas\netCore\TableConsole> dotnet run
Unhandled exception. System.AggregateException: One or more errors occurred. (No valid combination of account information found.)
—> System.FormatException: No valid combination of account information found.
at Microsoft.Azure.Cosmos.Table.CloudStorageAccount.<>c.<Parse>b__73_0(String err)
at Microsoft.Azure.Cosmos.Table.CloudStorageAccount.ParseImpl(String connectionString, CloudStorageAccount& accountInformation, Action`1 error)
at Microsoft.Azure.Cosmos.Table.CloudStorageAccount.Parse(String connectionString)
at TableConsole.Program.CreateTableAsync(String tableName, String connectionString) in D:\cursoPlatzi\platzi curso Paas\netCore\TableConsole\Program.cs:line 27
— End of inner exception stack trace —
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at TableConsole.Program.Main(String[] args) in D:\cursoPlatzi\platzi curso Paas\netCore\TableConsole\Program.cs:line 21

Excelente!