0

同じ行に2つの値を設定する次のコードがあります。これは非常に単純ですが、1つのクエリに組み合わせる方法がわかりません。

 Dim cnn As New SqlConnection
            Dim sqlcmd As New SqlCommand("SELECT catalogid, delivered,nodilivary FROM supporder", cnn)
            sqlcmd.CommandText = "update supporder SET delivered=@delivered WHERE catalogid=@catalogid"
            sqlcmd.Parameters.Add(New SqlParameter("@delivered", GridControl2.GetCellValue(currentrowindex, "delivered")))
            sqlcmd.Parameters.Add(New SqlParameter("@catalogid", GridControl2.GetCellValue(currentrowindex, "catalogid")))
            cnn.Open()
            sqlcmd.ExecuteNonQuery()
            sqlcmd.Parameters.Clear()
            cnn.Close()
            sqlcmd.CommandText = "update supporder SET nodilivary=@nodilivary WHERE catalogid=@catalogid"
            sqlcmd.Parameters.Add(New SqlParameter("@nodilivary", GridControl2.GetCellValue(currentrowindex, "nodilivary")))
            sqlcmd.Parameters.Add(New SqlParameter("@catalogid", GridControl2.GetCellValue(currentrowindex, "catalogid")))
            cnn.Open()
            sqlcmd.ExecuteNonQuery()
            sqlcmd.Parameters.Clear()
            cnn.Close()
4

2 に答える 2

2

更新する各フィールドは、コンマを使用して区切ります。

UPDATE supporder SET nodilivary=@nodilivary, delivered=@delivered WHERE catalogid=@catalogid
于 2012-10-08T01:39:47.253 に答える
1

これを試して:

Dim cnn As New SqlConnection

Dim sql as String = string.Format("update supporder set delivered={0}, nodilivary={1} where catalogid={2}", _
                    GridControl2.GetCellValue(currentrowindex, "delivered")  _
                    GridControl2.GetCellValue(currentrowindex, "nodilivary") _
                    GridControl2.GetCellValue(currentrowindex, "catalogid") )           


Dim sqlcmd As New Sqlsql, cnn)
cnn.Open()
sqlcmd.ExecuteNonQuery()
sqlcmd.Parameters.Clear()
cnn.Close()

私は手元にVBを持っていませんが、これはかなり近いはずです。

編集:

これは、コマンドパラメータを使用した上記のバージョンであり、(コメントに感謝します)SQLインジェクションの単純な防御であり、上記のコードよりも安全です。

Dim cnn As New SqlConnection

Dim sql as String = "update supporder set delivered=@delivered, nodilivary=@nodilivary where catalogid=@catalogid"

Dim sqlcmd As New Sql(sql, cnn)
sqlcmd.Parameters.Add(New SqlParameter("@delivered", GridControl2.GetCellValue(currentrowindex, "delivered"))
sqlcmd.Parameters.Add(New SqlParameter("@nodilivary", GridControl2.GetCellValue(currentrowindex, "nodilivary"))
sqlcmd.Parameters.Add(New SqlParameter("@catalogid", GridControl2.GetCellValue(currentrowindex, "catalogid"))
cnn.Open()
sqlcmd.ExecuteNonQuery()
sqlcmd.Parameters.Clear()
cnn.Close()
于 2012-10-08T01:42:05.173 に答える