###前提・実現したいこと
StringBuilderとString.Formatを一緒に使いたい。
追加レコード、削除レコードに関しては正常に動作する。
以下の更新されたレコード の部分でコメントアウトにしてあるコードを通るように修正したい。
(現在は代わりにその下に書いてある部分8行を実行して動作させている。)
###該当のソースコード(ウィンドウを閉じるときにMDBファイルに書き込みをする)
VB.NET
1
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable) '例外処理 Try For Each Row As DataRow In Table.Rows 'Dim SQL As String = "" Dim SQL As StringBuilder = New StringBuilder() '●SQL文の生成 Select Case Row.RowState Case DataRowState.Added '▼追加されたレコード SQL.Append("INSERT INTO tblL ( ") SQL.Append("SELFLG") SQL.Append("a") SQL.Append("b") SQL.Append("c") SQL.Append("d") SQL.Append("e") SQL.Append("f") SQL.Append("g") SQL.Append(")") SQL.Append(String.Format("VALUES({0},{1},{2},{3},{4},{5},{6},{7})", Type(Row("SELFLG"), FuncParam1.paramElse), Type(Row("a"), FuncParam1.paramElse), Type(Row("b"), FuncParam1.paramString), Type(Row("c"), FuncParam1.paramString), Type(Row("d"), FuncParam1.paramString), Type(Row("e"), FuncParam1.paramString), Type(Row("f"), FuncParam1.paramString), Type(Row("g"), FuncParam1.paramString))) '▼削除されたレコード Case DataRowState.Deleted SQL.Append("DELETE FROM tblL WHERE ") SQL.Append(" IDNo = " & Row("IDNo", DataRowVersion.Original)) '▼更新されたレコード Case DataRowState.Modified SQL.Append("UPDATE tblL SET ") 'SQL.Append(String.Format(", SELFLG = {0}", Type(Row("SELFLG"), FuncParam1.paramElse))) 'SQL.Append(String.Format(", a = {0}", Type(Row("a"), FuncParam1.paramString))) 'SQL.Append(String.Format(", b = {0}", Type(Row("b"), FuncParam1.paramString))) 'SQL.Append(String.Format(", c = {0}", Type(Row("c"), FuncParam1.paramString))) 'SQL.Append(String.Format(", d = {0}", Type(Row("d"), FuncParam1.paramString))) 'SQL.Append(String.Format(", e = {0}", Type(Row("e"), FuncParam1.paramString))) 'SQL.Append(String.Format(", f = {0}", Type(Row("f"), FuncParam1.paramString))) 'SQL.Append(String.Format(", g = {0}", Type(Row("g"), FuncParam1.paramElse)))
SQL.Append(" SELFLG = '" & Type(Row("SELFLG"), FuncParam1.paramElse) & "', ")
SQL.Append(" a = '" & Type(Row("a"), FuncParam1.paramString) & "', ")
SQL.Append("b = '" & Type(Row("b"), FuncParam1.paramString) & "', ")
SQL.Append("c = '" & Type(Row("c"), FuncParam1.paramString) & "', ")
SQL.Append("d = '" & Type(Row("d"), FuncParam1.paramString) & "', ")
SQL.Append("e = '" & Type(Row("e"), FuncParam1.paramString) & "', ")
SQL.Append("f = '" & Type(Row("f"), FuncParam1.paramString) & "', ")
SQL.Append("g = " & Type(Row("g"), FuncParam1.paramElse))
SQL.Append("WHERE")
SQL.Append("IDNo = " & Row("IDNo", DataRowVersion.Original))
Case Else Continue For End Select '●更新実行 SQLCm.CommandText = SQL.ToString Cn.Open() SQLCm.ExecuteNonQuery() Cn.Close() Next Catch ex As Exception MessageBox.Show(ex.Message, "エラーが発生しました", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally '▼後処理 Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Try End Sub
Type()は、Functionで定義→Type(列,列の型名) String.Formatの使い方、StringBuilderの使い方はそれ単体ではわかるが、組み合わせようとするとわからなくなってしまう。 (単体が理解できていない可能性があるかもしれない…?) ###追記 「String.Formatを使うと文字連結の見やすさが上がり、間違いにくくなる」と聞き、使おうとしているのですが、イミディエイトウィンドウでSQLを調べるとガタガタで非常に気になります(スペースの入り方など、表示上合わせるとこっちがバラバラになる)。 通常見るところではないので、大丈夫ならいいのですが、SQL文に変換されたときにスペースの数などは関係ないのですか? (これまではあけるときはスペース1つ分と思ってきたので…。)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。