Por que minha tabela não está sendo criada?
Eu tenho esse código no meu aplicativo Winforms para criar uma tabela em um banco de dados existente (que eu criei seguindo o que está escritoaqui):
private void CreateTables()
{
string connStr = @"Data Source=
(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|
\AYttFM.mdf;Integrated Security=True";
using (var connection = new
System.Data.SqlClient.SqlConnection(connStr))
{
try
{
connection.Open();
using (var command = connection.CreateCommand())
{
StringBuilder sb = new StringBuilder();
sb.Append("CREATE TABLE [dbo].[AssignmentHistory] ");
sb.Append("(");
sb.Append("[Id] INT NOT NULL PRIMARY KEY, ");
sb.Append("[WeekOfAssignment] DATE NOT NULL,");
sb.Append("[TalkType] INT NOT NULL,");
sb.Append("[StudentID_FK] INT NOT NULL, ");
sb.Append("[AssistantID_FK] INT NOT NULL, ");
sb.Append("[CounselPoint] INT NOT NULL");
sb.Append(")");
command.CommandText = sb.ToString();
command.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
É executado sem reclamação, mas nenhuma tabela é criada. A atualização da pasta Data Connection e suas tabelas no Server Explorer no Visual Studio Community 2015 não mostra tabelas.
Estou faltando algo no código acima?
Nota: Eu quebrei o connStr por várias linhas acima para fins de formatação; no código real, connStr está tudo em uma linha.
Também não consigo me conectar ao arquivo .mdf via LINQPad, usando o "LINQ to SQL padrão" e o SQL Server Provider e navegando até o arquivo .mdf no meu projeto (C: \ AYttFMApp \ AYttFMScheduler \ AYttFMScheduler \ AYttFMS. mdf). Diz-me que há um erro de rede:
Entendo se uso o Servidor ". \ SQLEXPRESS" padrão ou se o defino como o nome da minha máquina (que é a única entrada abaixo de "Servidores" no Server Explorer do Visual Studio).
ATUALIZARReiniciei meu laptop, mas não ajudou. As conexões de dados do Server Explorer não mostram nada, mesmo após a atualização e a tentativa de adicionar uma, com o nome da minha máquina como o nome do servidor (afinal, é o que diz que o servidor existe no Server Explorer) e a seleção do arquivo .mdf fornece o mesmo erro ao testar a conexão que o LINQPad faz.
ATUALIZAÇÃO 2Mais e mais curioso: agora, quando executo meu aplicativo, quando chega ao código Criar tabela, recebo uma mensagem de exceção informando que a tabela AssignmentHistory já foi criada. No entanto, se eu olhar o Server Explorer, embora o próprio banco de dados esteja de volta, sua pasta Tabelas ainda está vazia. Como a mesa pode estar lá e não estar lá?
Ainda estou pensando se as propriedades definidas no arquivo .mdf estão erradas; como escrevi em um comentário abaixo, as propriedades são todos os padrões: "Copiar para Diretório de Saída" é definido como "Copiar Sempre" e "Ação de Compilação" é definido como "Conteúdo".