база данных mdf в wpf c # проблема развертывания - PullRequest
0 голосов
/ 06 апреля 2019

Я создал приложение WPF с использованием C #, и для своей базы данных я использую .mdf файлы.Когда я развертываю приложение на своем компьютере, оно работает отлично.Но когда я пытаюсь использовать его на другом компьютере, иногда он говорит, что не может открыть базу данных.

После большой кропотливой работы, чтобы выяснить это, я попал в другую ошибку, когда увидел свою базу данных на этом ПК.Он говорит, что ссылка на объект не установлена ​​для экземпляра объекта.

В чем может быть проблема?

После того, как я закончил, развернул и протестировал его на моем ПК, прекрасно работает.

Я пробовал на другом ПК, установка только sqllocaldb, не работал.

Я пытался установить SQL Server Management Studio, и после долгих тренировок мне удалось создать .mdf файл базы данных там с моими таблицами и данными.Но я получил сообщение об ошибке, в котором говорится, что ссылка на объект не установлена ​​для экземпляра объекта.

Моя строка подключения:

String connString = "Data Source=(localdb)\\MSSQLLocalDB;Integrated Security=True;database='Autoecole.mdf';Initial Catalog=Autoecole.mdf;Connect Timeout=30;";

И мой файл базы данных Autoecole.mdf, действие сборки - это содержимое, «копировать в выходной каталог» установлен на «копировать, если новее».

Я ожидаю увидеть некоторые данные серийных ключей и т. д ... но я ничего не получил.

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

Здравствуйте, я попытался выполнить резервное копирование базы данных и восстановить ее на удаленном ПК, затем я попытался выполнить то, что вы мне сказали, в первую очередь, кажется, работает отлично, приложение запустилось с подключением к базе данных, но когда япопробуйте другие функции, используя sql, в приложении написано, что «ссылка на объект не установлена ​​для экземпляра объекта».что делать

мой app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
      <add name="Autoecole.mdf"
      connectionString="Data Source=(localdb)\MSSQLLocalDB; Integrated Security=True; database='Autoecole.mdf'; Initial Catalog=Autoecole.mdf; Connect Timeout=30"
      providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
</configuration>

и мой connString:

String connString = System.Configuration.ConfigurationManager.ConnectionStrings["Autoecole.mdf"].ConnectionString.ToString();

ИЗМЕНИТЬ СНОВА

пример кода, который использует sql

private void activation_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                textBox.Text = CalculateMD5Hash(GetMacAddress().ToString());
                String mac = textBox.Text.ToString();
                String serial = CalculateMD5Hash(textBox1.Text.ToString());
                String connString = System.Configuration.ConfigurationManager.ConnectionStrings["Autoecole.mdf"].ConnectionString.ToString();
                String query = "update activation set activated='" + 1 + "' where serial='" + serial + "'";
                String query1 = "insert into localadress values('" + mac + "')";
                SqlConnection conn = new SqlConnection(connString);
                SqlCommand command = new SqlCommand(query, conn);
                conn.Open();
                int x = command.ExecuteNonQuery(); 
                if (x >0)
                {
                    MessageBox.Show("Application activé");
                    conn = new SqlConnection(connString);
                    command = new SqlCommand(query1, conn);
                    conn.Open();
                    command.ExecuteNonQuery();
                    MessageBox.Show("Redemmarer l'application");
                }
                else
                {
                    MessageBox.Show("Numero de serie faux, l'application va se fermer");
                }
                System.Windows.Application.Current.Shutdown();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                SqlConnection conn = new SqlConnection();
                conn.Close();
            }
        }

1 Ответ

1 голос
/ 06 апреля 2019

Во-первых, простым решением этой проблемы может быть проверка правильности написания ваших путей. Если это так, убедитесь, что на вашем другом компьютере установлена ​​Microsoft SQL Server 2017 или любая другая версия Microsoft SQL Server, которую вы хотите установить. Также убедитесь, что ваша строка подключения объявлена ​​точно таким же образом в вашем файле App.config, или что она по крайней мере объявлена ​​там в первую очередь. Для вас это будет выглядеть примерно так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <connectionStrings>
      <add name="Autoecole.mdf"
      connectionString="Data Source=(localdb)\\MSSQLLocalDB; Integrated Security=True; database='Autoecole.mdf'; Initial Catalog=Autoecole.mdf; Connect Timeout=30"
      providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

Если вы уже сделали это, вы можете явно запросить у Visual Studio информацию о строке подключения, используя следующий код:

string con = System.Configuration.ConfigurationManager.ConnectionStrings["Autoecole.mdf"].ConnectionString;

Я также читал, что вы можете использовать метод ToString() вместо доступа к свойству ConnectionString в конце кода, вот так:

string con = System.Configuration.ConfigurationManager.ConnectionStrings["Autoecole.mdf"].ToString();

Я бы попробовал оба. Надеюсь, что это работает для вас!

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