Сбой приложения C # Winform на SqlConnection - PullRequest
0 голосов
/ 09 мая 2019

У меня есть программа Winform, которая имеет много функций SqlConnection, которые взаимодействуют с локальной базой данных MDF.

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

String dbPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Bot\DB\BotDB.mdf";
String con = String.Format("Data Source=(LocalDB)\\v11.0;AttachDbFilename=\"{0}\";Integrated Security=True;Connection Timeout=10;", dbPath);
return con;

И это один из многих звонков, которые я сделал в базе данных:

public bool InsertNewUserToTable(String username)
{
    using (SqlConnection con = new SqlConnection(DataBase.GetConString()))
    {
        con.Open();

        String query = @"INSERT INTO dbo.Users(username) VALUES(@username);";

        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@username", username);

            int count = cmd.ExecuteNonQuery();

            con.Close();

            return (count == 0) ? false : true;
        }
    }
}

У меня есть больше методов, таких как этот, который удаляет, обновляет, вставляет данные из базы данных.

Программа, работающая с многопоточностью, которая таким образом обращается к базе данных.

Проблема в том, что иногда я получаю ошибку сбоя (в режиме публикации):

Problem signature:
  Problem Event Name:   CLR20r3
  Problem Signature 01: Bot.exe
  Problem Signature 02: 1.0.0.0
  Problem Signature 03: 5cbce361
  Problem Signature 04: System.Data
  Problem Signature 05: 4.7.2623.0
  Problem Signature 06: 5a1f67d8
  Problem Signature 07: 1a55
  Problem Signature 08: 5e
  Problem Signature 09: System.Data.SqlClient.Sql
  OS Version:   6.3.9600.2.0.0.272.7
  Locale ID:    1033
  Additional Information 1: 4e4b
  Additional Information 2: 4e4be395a3a959f2a72f71ab9c9204ab
  Additional Information 3: 783e
  Additional Information 4: 783ea04fb900812a4241ad9aeb1b45b6

Read our privacy statement online:
  http://go.microsoft.com/fwlink/?linkid=280262

If the online privacy statement is not available, please read our privacy statement offline:
  C:\Windows\system32\en-US\erofflps.txt

Я пытался найти способ найти конкретное исключение с помощью этой информации: https://stackoverflow.com/a/4053325/679099

Но я не смог найти какую-то конкретную вещь, которая бы вылетала из моего приложения.

Есть идеи, в чем может быть проблема? Что-то еще, что мне не хватает?

1 Ответ

0 голосов
/ 26 мая 2019

Попытайтесь определить частный SqlConnection и поместите этот код в InitializeComponent ();

con = new SqlConnection(@"Data Source=(LocalDB)\\v11.0;AttachDbFilename=\"{0}\";Integrated Security=True;Connection Timeout=10;User Instance=True;MultipleActiveResultSets=True;");
con.Open();

Это соединение работает для нескольких открытых соединений, потому что у вас есть MARS = True;

Тогда дляSqlCommand, вам нужно сделать только так:

SqlCommand cmd = new SqlCommand("query", con);

Конечный код SqlConnection должен выглядеть так:

private SqlConnection con;
public Form1()
{
    InitializeComponent();
    con = new SqlConnection(@"Data Source=(LocalDB)\\v11.0;AttachDbFilename=\"{0}\";Integrated Security=True;Connection Timeout=10;User Instance=True;MultipleActiveResultSets=True;");
    con.Open();
}
...