トップ回答者
VB2008 ボタンを押すと、コード内に記述したSQLが実行されるようなプログラムを作りたい

質問
-
Visual Basic 2008 Express Editionと、Microsoft SQL Server Compact 3.5
を使用してアプリケーションを作成しています。
ボタンを押すと、コード内に記述したSQLが実行されるようなプログラムを作りたいのですが、
知識不足のため、セットしたSQLをどうやって発行すれば良いのかが分かりません。
作成中のプログラムは、以下のような感じです。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sql As New SqlClient.SqlCommand("INSERT INTO Addresses VALUES ('ねこ','品川','東京',200);")
Dim Adapter As New SqlClient.SqlDataAdapter(sql)
Dim Addresses As New DataTableAdapter.Update(Me.Database1DataSet.Addresses)
End Subどなたかご教授いただければ幸いです。
以上、よろしくお願いいたします。
回答
-
nekota00 さんからの引用
DB(名前:Testdb.sdf)へ接続する部分は、具体的にどのように記述したらいいでしょうか?
以下のような感じになります。
Code SnippetDim cn As SqlCeConnection = Nothing
Try
cn = New SqlCeConnection("Data Source=|DataDirectory|\Database1.sdf")
Dim cmd As SqlCeCommand = New SqlCeCommand("insert test (item1, item2) values('hoge', 'fuga')",cn)
cn.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
End Trynekota00 さんからの引用
使用しているDBは「SQL Server 2005 Express Edition」ではなく「Microsoft SQL Server Compact 3.5」なのですが、
接続する部分の記述(connectionStringなど)に違いはあるでしょうか?
SQL Server 2005 Express Editionの拡張子はmdfですので、まずそこが違います。実際にはSystem.Data.SqlServerCeを使用して接続しますので、細かなオプションも違います。
SqlCeConnection.ConnectionString プロパティ
http://msdn.microsoft.com/ja-jp/library/system.data.sqlserverce.sqlceconnection.connectionstring(VS.71).aspxSqlConnection.ConnectionString プロパティ
-
nekota00 さんからの引用 InsertCommandのサンプルにある、
adapter.InsertCommand = command
という部分がSQLを実行している部分なのでしょうか?
adapter.InsertCommandはSqlDataAdapter.Update()メソッドで引数に指定したDataTableなどのデータの中で、新規に追加された行データを実際にテーブルにINSERTするときに使用される、SqlCommandクラスのプロパティです。UpdateCommand,DeleteCommandもそれぞれ、Update,Delete分を発行するときに使用されます。
SelectCommandプロパティはUpdateではなく、Fillメソッドを呼び出して、Fillメソッドの引数で指定したDataTableなどにデータベースのテーブルからデータを取得(Select)するときに使用されます。
nekota00 さんがどのように登録処理をしたいのかがわかりませんが、単一のレコードをデータベースのテーブルに追加したい場合なら、単にSqlCommand.ExecuteNonQuery()を使用すればよいと思います。
SqlDataAdapter.Update()はきちんと理解しないとすこしとっつきにくいと(あくまで個人的には)思いますので。
すべての返信
-
nekota00さんこんにちは
提示されたプログラムだと検索したいのか、登録したいのかがわかりませんが、AddressesというDataTableの内容を登録したいのならInsertCommandの説明で提示されているサンプルが参考になると思います。
-SqlDataAdapter.InsertCommand プロパティ
データを検索する場合はFillメソッドを使用します。
http://msdn.microsoft.com/ja-jp/library/905keexk(VS.80).aspx
-
SqlCommandとSqlDataAdapterの概念をよく理解されていないようです。SqlDataAdapter
はデータベースよりレコードセットをローカルのデータテーブルに抽出してきて、データテーブル上でデータを編集した後、複数のレコードをまとめてデータベースへ戻す(保存・変更・削除)ために存在します。
上記のようにデータテーブルを使わない、使う必要がない場合は、SqlCommandを使います。
簡単に書けば以下のようになります。
Code SnippetTry
SqlConnection1.Open()
SqlCommand1.CommandType = CommandType.Text
SqlCommand1.CommandText = "INSERT INTO Addresses VALUES ('ねこ','品川','東京',200);")"SqlCommand1.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
SqlConnection1.Close()
End Try -
handcraftさま
ご回答ありがとうございます。
検索、登録どちらも行いたいです。
教えていただいたサンプル、大変参考になります。
InsertCommandのサンプルにある、
adapter.InsertCommand = command
という部分がSQLを実行している部分なのでしょうか?
また、SqlDataAdapterを使用する場合、
Microsoft SQL Server Compact 3.5のDB(名前:Testdb.sdf)へ
接続する部分はどう記述すれば良いのでしょうか?
何度も質問をしてしまってすみません。
時間のあるときで構いませんので、ご教授のほどよろしくお願いいたします。
-
trapemiyaさま
ご回答ありがとうございます。
おっしゃるとおり、SqlCommandとSqlDataAdapterを混同していたようです。
ご提示いただいたコードは大変参考になりました。
SqlCommandをる使用するやり方は、ほかの言語にも共通した感じがするので
とっつきやすいです。
二点、質問させていただきたいのですが、
DB(名前:Testdb.sdf)へ接続する部分は、具体的にどのように記述したら
いいでしょうか?
使用しているDBは「SQL Server 2005 Express Edition」ではなく
「Microsoft SQL Server Compact 3.5」なのですが、
接続する部分の記述(connectionStringなど)に違いはあるでしょうか?
時間のあるときで構いませんので、ご教授のほどよろしくお願いいたします。 -
nekota00 さんからの引用
DB(名前:Testdb.sdf)へ接続する部分は、具体的にどのように記述したらいいでしょうか?
以下のような感じになります。
Code SnippetDim cn As SqlCeConnection = Nothing
Try
cn = New SqlCeConnection("Data Source=|DataDirectory|\Database1.sdf")
Dim cmd As SqlCeCommand = New SqlCeCommand("insert test (item1, item2) values('hoge', 'fuga')",cn)
cn.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
End Trynekota00 さんからの引用
使用しているDBは「SQL Server 2005 Express Edition」ではなく「Microsoft SQL Server Compact 3.5」なのですが、
接続する部分の記述(connectionStringなど)に違いはあるでしょうか?
SQL Server 2005 Express Editionの拡張子はmdfですので、まずそこが違います。実際にはSystem.Data.SqlServerCeを使用して接続しますので、細かなオプションも違います。
SqlCeConnection.ConnectionString プロパティ
http://msdn.microsoft.com/ja-jp/library/system.data.sqlserverce.sqlceconnection.connectionstring(VS.71).aspxSqlConnection.ConnectionString プロパティ
-
nekota00 さんからの引用 InsertCommandのサンプルにある、
adapter.InsertCommand = command
という部分がSQLを実行している部分なのでしょうか?
adapter.InsertCommandはSqlDataAdapter.Update()メソッドで引数に指定したDataTableなどのデータの中で、新規に追加された行データを実際にテーブルにINSERTするときに使用される、SqlCommandクラスのプロパティです。UpdateCommand,DeleteCommandもそれぞれ、Update,Delete分を発行するときに使用されます。
SelectCommandプロパティはUpdateではなく、Fillメソッドを呼び出して、Fillメソッドの引数で指定したDataTableなどにデータベースのテーブルからデータを取得(Select)するときに使用されます。
nekota00 さんがどのように登録処理をしたいのかがわかりませんが、単一のレコードをデータベースのテーブルに追加したい場合なら、単にSqlCommand.ExecuteNonQuery()を使用すればよいと思います。
SqlDataAdapter.Update()はきちんと理解しないとすこしとっつきにくいと(あくまで個人的には)思いますので。
-
handcraft さま
ご回答ありがとうございます。
adapter.InsertCommandはプロパティで、SQL文を実行する関数ではないのですね。
InsertCommand、UpdateCommand、DeleteCommandでは、
SqlDataAdapter.Update()メソッドがSQL文を実行する関数にあたり、
SelectCommandプロパティでは、Fillメソッドがそれにあたるという解釈で
正しいでしょうか?
SqlDataAdapter.Update()を使用してSQLを発行できるようにもなりたいので、
きちんと理解できるようになるまで、もっと勉強します。
丁寧に教えてくださり、ありがとうございました!