2016-04-19 6 views
-1

SQL更新ステートメントの列のトリムは可能ですか?基本的には、ボタンをクリックすると、グリッドビューで選択されている列の下で、「ステータス」列の左側から10文字をトリミングしますか?SQL更新ステートメントの文字を切り取りますか?

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
     If (e.CommandName = "Unlock") Then 

      Dim index As Integer = Convert.ToInt32(e.CommandArgument) 
      Dim row As GridViewRow = GridView1.Rows(index) 


      Try 

       Dim Con As SqlConnection 
       Dim cmd As SqlCommand 
       Con = New SqlConnection 
       Con.ConnectionString = "Data Source=" 
       Con.Open() 

       cmd = New SqlCommand 
       cmd.Connection = Con 

       '''''Can I trim the status column 10 characters where it is the selected row?''''''''''' 
       cmd.CommandText = "UPDATE tbltest SET Status = '" & ?????? & "' where row = '" & ???????? & "';" 

       cmd.ExecuteNonQuery() 

      Catch ex As System.Exception 


      End Try 

     End If 
    End Sub 
+0

この行をトリミングしたいだけですか?主キーとは何ですか? –

+0

これは私の質問の一部です。どうすれば、グリッドビュー上でボタンがクリックされた正しい行がトリムされることを確認できますか?各行に10個のロック解除ボタンが付いた10個の行があります – user1342164

+1

GridViewRowを持っていて、PK情報を 'TemplateField'内の(隠し)コントロールに格納し、' row.FindControl( "ControlID") '。あるいは、あなたは[DataKeys'経由で入手できます(http://stackoverflow.com/questions/2818203/get-datakey-values-in-gridview-rowcommand)。次に、sql-parametersを使用するようにSQLクエリを変更します(主にSQLインジェクションの脆弱性を修正するため)。 'UPDATE tbltest SET Status = RIGHT(ステータス、LEN(ステータス) - 10)WHERE ID = @ ID'このようにsqlを使用することができます。 –

答えて

0

文字列をトリミングする方法については、下記を参照してください。これは、Sqlで正しいレコードを選択する方法には答えません。テーブルの識別子が何であるか把握し、データグリッドが同じ識別子を使用していることを確認する必要があります。理想的には、識別子は表の主キーです。その後、パラメータ化されたクエリを使用してWHERE句のパラメータとして渡します。


sqlのSubStringメソッドを参照してください。 SQLクエリは、私は空の文字列が返されます、その場合に利用できる10未満の文字がある場合は、例外を取得しないことを保証するために、長さチェックを追加

UPDATE tbltest 
SET Status = SubString(Status, 0, CASE WHEN LEN(Status) >= 10 THEN 10 ELSE LEN(Status) END) 
where TablePkColumn = @myPkParameter 

だろう。

その他の重要なポイント

  • 接続が常に閉じているので、あなたがそれで行われたときにusingブロックであなたの接続文字列をラップしてください。または、finallyブロックを使用して接続を終了してください。
  • 文字列連結の代わりにパラメータ化されたクエリを使用します。これはwhere句用ですが、クエリで使用されている外部入力がある場所ならどこでも実行してください。
関連する問題