0

これがSOで最もよくある質問の1つであることを私は知っています。有名な「SQLエラー26」の違いは、C#アプリケーションが最初に接続を正常に確立し、2回目に接続を確立することを拒否することです。コンピューターを再起動すると、アプリケーションが最初に接続を確立してから、再起動が必要になります。

初めて接続を確立できるという事実は、次のことを確信しています。サーバー名が正しい、インスタンス名が正しい、使用するユーザー名とパスワードの組み合わせが正しい、サーバーマシンがオンになっている、SQLブラウザサービスがオンになっているサーバーが実行されており、ファイアウォールを通過できます。

私はすべてが次のように非常に似ているメソッドの束を持っています:

private static string connection_string = @"Server=my_server\MS_SQL;User Id=user1;Password=password1"

public static List<string> GetListOfExistingItems(int item_id)
    {
        List<string> list_items = new List<string>();

        try
        {
            using (SqlConnection sql_conn = new SqlConnection(connection_string))
            {
                sql_conn.Open();

                SqlCommand sql_comm = new SqlCommand("SELECT Name FROM dbo.table1 WHERE ID=" + item_id, 
                                                     sql_conn);

                using (SqlDataReader sql_reader = sql_comm.ExecuteReader())
                {
                    while (sql_reader.Read())
                    {
                        list_items.Add(sql_reader["Name"].ToString());
                    }
                    sql_reader.Close();
                }
            }
        }
        catch (Exception excp)
        {
            throw new Exception(excp.Message);
        }
        return list_items;
    }

いくつかの興味深い事実:

  • 再起動すると問題が修正されます(1回)。
  • ログアウトしてログインしても問題は解決しません。
  • アプリケーションを閉じずにクエリを複数回実行すると、エラーは表示されません。
  • アプリケーションを実行して一度閉じた後、SQL ServerManagementStudioからデータベースに接続できません。
  • コンピュータを再起動すると、プログラムが表示されずに「バックグラウンドプログラムが閉じるのを待っています」と表示されます。しばらく(おそらく10〜20秒)待つと、メッセージが消え、最終的にコンピューターが再起動します。

前もって感謝します。

4

1 に答える 1

0

どこかで接続を閉じていません。

次のトラブルシューティング手順は、コード(すべて)でを文字列検索sql_conn.Open();し、usingブロックにないコード、または明示的に閉じられていないコードを見つけることです。

于 2013-03-13T19:24:31.660 に答える