C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: SQLite接続後ファイルがclose出来ない


(過去ログ 123 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■73406 / inTopicNo.1)  SQLite接続後ファイルがclose出来ない
  
□投稿者/ のせんす (6回)-(2014/09/23(Tue) 08:56:35)

分類:[VB.NET/VB2005 以降] 

db_now_pathで指定された、SQLiteデータベースに接続して、
列名とデータをDataGridViewに表示します。
一応正常に表示出来ていますが、実行後ファイルがclose出来ていません。
エラーもありません。

列名と実データを取得する為に、
DataReader = Command.ExecuteReader を
二度実行していますが、これがいけないのでしょうか?
一度閉じてとか試みましたが、わかりませんでした。
よろしくお願い致します。


Sub top10() '10件
col_dread() '列名読込
DataGridView1.DataSource = ""
Dim dt As New DataTable()
Dim Connection As New SQLiteConnection
Dim Command As SQLiteCommand
Dim DataReader As SQLiteDataReader
Connection.ConnectionString = "Version=3;Data Source=" & db_now_path & ";New=False;Compress=True;"
Try
Connection.Open()
Try
'列名表示
Command = Connection.CreateCommand
Command.CommandText = "PRAGMA table_info(table1)"
DataReader = Command.ExecuteReader
Do While DataReader.Read()
dt.Columns.Add(DataReader.GetString(1), GetType(String))
Loop
'実データ表示
Command = Connection.CreateCommand
Command.CommandText = "select * from TABLE1 where SSID<>100000000 limit " & "10"
DataReader = Command.ExecuteReader
Do Until Not DataReader.Read
kobetu_get(DataReader)
dt.Rows.Add(raw_d)
Loop
DataGridView1.DataSource = dt
Catch ex As Exception
MsgBox("Command error!")
Finally
DataReader.Close()
Command.Dispose()
Connection.Close()
Connection.Dispose()
End Try
Catch ex As Exception
MsgBox("open error!")
End Try
Exit Sub
End Sub
引用返信 編集キー/
■73407 / inTopicNo.2)  Re[1]: SQLite接続後ファイルがclose出来ない
□投稿者/ WebSurfer (347回)-(2014/09/23(Tue) 11:28:56)
No73406 (のせんす さん) に返信

別のスレッド、

http://bbs.wankuma.com/index.cgi?mode=al2&namber=73346

で、「2台のパソコンで、このプログラムを実行して同時にアクセス」するなら
SQLite は諦めて、SQL Server を使用するなどの手段を取るべきという結論にな
ったと理解しているのですが、違うのですか?

もし、まだ結論が出ていないなら、そちらの方の結論を出してから、この質問を
してはいかがですか?

SQLite は使わないという結論になった場合は、この質問は意味がないかもしれ
ませんし。
引用返信 編集キー/
■73408 / inTopicNo.3)  Re[2]: SQLite接続後ファイルがclose出来ない
□投稿者/ のせんす (7回)-(2014/09/23(Tue) 13:12:40)
No73407 (WebSurfer さん) に返信
>「2台のパソコンで、このプログラムを実行して同時にアクセス」するなら
> SQLite は諦めて、SQL Server を使用するなどの手段を取るべきという結論にな
> ったと理解しているのですが、違うのですか?
そうであろうと思います。なので、解決としようかと思ったのですが、解決なのか?
と思い、そのままにしています。
しかし、これはだめだとわかったと言う解決ですね。そうしておきます。

同じスレッドで続いて質問するには内容が違ったので別にしました。
更に、同時アクセスが出来なくともSQLiteを使用する事も考えているので、
次に進んで作っている時にまたわからない事が発生したので、質問させて
いただきました。同時アクセスに限らず、closeしていない事がわかったので。

また、同時アクセスしないように、VB.NETレベルで考慮しようとも考えているので
この質問には私にとっては意味はあると考えています。

引用返信 編集キー/
■73410 / inTopicNo.4)  Re[3]: SQLite接続後ファイルがclose出来ない
□投稿者/ WebSurfer (348回)-(2014/09/23(Tue) 14:12:36)
No73408 (のせんす さん) に返信

> しかし、これはだめだとわかったと言う解決ですね。そうしておきます。

同時アクセスはしないようにして SQLite の使用を続けるということでしょうか?
であれば先のスレッドにその旨書いてクローズされた方がいいと思います。

そうしないと、先の自分のレスで書いたように「SQLite は使わないという結論に
なった場合は、この質問は意味がない」と思われて、解答がつきにくいと思います。


> また、同時アクセスしないように、VB.NETレベルで考慮しようとも考えているので
> この質問には私にとっては意味はあると考えています。

で、本件ですが、質問に対する直接の回答ではなくてすみませんが、普通に標準
的に Visual Studio のデータソース構成ウィザードを使って、型付 DataSet +
TableAdapter を使って、以下のページにあるような構成のアプリをつってはいか
がですか?

Visual Studio でのデータへの接続の概要
http://bbs.wankuma.com/index.cgi?mode=al2&namber=73406

以下のページによると SQLite でもそれが可能なようです。

System.Data.SQLiteデータベース基本操作 その2 DataGridViewとの連携 (C#)
http://c-loft.com/blog/?p=1844

そうすれば自力では一行もコードを書かず、Visual Studio がコードを自動生成
して標準的なアプリを作ってくれますので、間違いはないし開発工数も大幅に
削減できるのではないかと思います。

引用返信 編集キー/
■73411 / inTopicNo.5)  Re[3]: SQLite接続後ファイルがclose出来ない
□投稿者/ WebSurfer (349回)-(2014/09/23(Tue) 14:17:31)
No73408 (のせんす さん) に返信

すみません。レスが前後してしまいました。別スレッドはすでに解決済みになっ
ていました。

それから、先のレスで URL を間違えました。正しくは下記の通りです。

Visual Studio でのデータへの接続の概要
http://msdn.microsoft.com/ja-jp/library/wxt2cwcc(VS.80).aspx

引用返信 編集キー/
■73413 / inTopicNo.6)  Re[4]: SQLite接続後ファイルがclose出来ない
□投稿者/ のせんす (9回)-(2014/09/24(Wed) 00:10:53)
No73411 (WebSurfer さん) に返信
WebSurfer さん大変有り難う御座いました。
教えていただいたところ拝見しましたが、私には理解出来ませんでした。
しかし、その関連として他も参考にしていると以下のコードの参考になる物を見つけました。
これですと、最初に私が書いたコードの何分の一にもなります。(アップしていない関連コードもあるため)
以下のもので、ファイルもcloseされる事も確認しましたので、これで進める事とします。
また、エラー処理の考慮がまた判断つきにくいため、とりあえず、下のものでは入れていません。
大変ありがとうございました

Sub top10() '10件
Dim sql_command As SQLiteCommand
Dim sql_connection = New SQLiteConnection("Version=3;Data Source=" & db_now_path & ";New=False;Compress=True;")
sql_connection.Open()
Dim data_set = New DataSet()
sql_command = sql_connection.CreateCommand
Dim command_string As String = "select * from TABLE1 where SSID<>100000000 limit " & "10"
Dim sql_data_adapter = New SQLiteDataAdapter(command_string, sql_connection)
Dim sql_command_builder = New SQLiteCommandBuilder(sql_data_adapter)
sql_data_adapter.Fill(data_set)
DataGridView1.DataSource = data_set.Tables(0).DefaultView

sql_command.Dispose()
sql_connection.Close()
sql_connection.Dispose()
data_set.Dispose()
sql_command_builder.Dispose()
sql_data_adapter.Dispose()
End Sub
解決済み
引用返信 編集キー/
■73414 / inTopicNo.7)  Re[5]: SQLite接続後ファイルがclose出来ない
□投稿者/ WebSurfer (350回)-(2014/09/24(Wed) 09:32:49)
No73413 (のせんす さん) に返信

> 教えていただいたところ拝見しましたが、私には理解出来ませんでした。

以下のページのチュートリアルは SQL Server のものですが、これが図入りで
分かりやすいと思います。

10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (VB)
http://code.msdn.microsoft.com/10-ADONET-VB-1c64942f/

この例では外部キー制約を持つ 2 つのテーブルの階層更新を行っているため
少し複雑ですが、単一テーブルならはるかに簡単で、Visual Studio のウィザ
ードに慣れれば 5 分もかからず DB の更新まで可能なアプリを完成できます。

今回の場合はデータを DataGridView に表示するところまでのようですが、
今後 DB の更新のためのコードも実装されるのではないでしょうか? であれ
ば、上記のページのチュートリアルのような方法にチャレンジされることをお
勧めします。

> しかし、その関連として他も参考にしていると以下のコードの参考になる物を見つけました。
> これですと、最初に私が書いたコードの何分の一にもなります。(アップしていない関連コードもあるため)

接続型を非接続型に変更したわけですね。それが正解と思います。

DataTable, DataAdapter を利用する非接続型の利点は以下のページの解説が
参考になると思います。全部読むのは面倒でしょうから、図1、図2だけでも
見てください。

DB 設計者のための明解 ADO.NET 第 1 回
http://msdn.microsoft.com/ja-jp/library/cc482903.aspx

DataTable, DataAdapter を拡張した型付 DataSet + TableAdapter を Visual
Studio のウィザードで作るのが上で紹介したチュートリアルです。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -