プロが教える店舗&オフィスのセキュリティ対策術

<>&などを保存する方法をおしえてください。

NameTextBox
CommentTextBox
保存ボタン
があり保存ボタンを押すと
下記コードが実行されるようにしました。

これで、保存はできるようになったのですが
<>&などを使用するとエラーとなってしまします。
<>&を使用するにはどのようにしたらいいのでしょうか?
教えてください。

Dim strSQL As String = "INSERT INTO tableA (Name,Comment) VALUES (@Name,@Comment)"
Using con As New SqlConnection(conStr)
Dim command As New SqlCommand(strSQL, con)
con.Open()
Using cmd1 As SqlDataReader = con.CreateCommand()
cmd1.CommandType = CommandType.Text
Try
with cmd1
.Parameters.Add("@Name", SqlDbType.NVarChar)
.Parameters.Add("@Comment", SqlDbType.NVarChar)
.Parameters("@Name").Value = NameTextBox
.Parameters("@Comment").Value = CommentTextBox
End With
cmd1.CommandText = strSQL
cmd1.ExecuteNonQuery()
Catch er As Exception
Finally
con.Close()
Catch ex As Exception
Finally
con.Close()
End Try
End Using
End Using

A 回答 (4件)

例えばどんな文字列で、どこの行でどんなエラーが出ますか?


ASP.NET で追試してみましたが正常に投入できましたよ。

Dim sql As String = "INSERT INTO tableA(Name, Comment) VALUES(@Name, @Comment)"
Dim conStr As String = "Data Source=hogePC;Initial Catalog=testDB;Persist Security Info=True;User ID=hogeUser;Password=hogePassword"

Using con As New SqlConnection(conStr)
 con.Open()
 Using cmd1 As SqlCommand = con.CreateCommand()
  cmd1.CommandType = Data.CommandType.Text
  Try
   With cmd1
    .Parameters.Add("@Name", Data.SqlDbType.NVarChar)
    .Parameters.Add("@Comment", Data.SqlDbType.NVarChar)
    .Parameters("@Name").Value = NameTextBox.Text
    .Parameters("@Comment").Value = CommentTextBox.Text
    .CommandText = sql
    .ExecuteNonQuery()
   End With
  Catch ex As Exception
  Finally
   con.Close()
  End Try
 End Using
End Using

この回答への補足

回答ありがとうございます。

エラーになる内容なのですが
<日本語>なら保存ができるのですが
どうやら<123ABC>など<>の中を半角英数字にすると
エラー:Sys.WebForms.PageRequestMasagerServerErrorrException:
サーバーで要求を処理中に不明なエラーが発生しました。
サーバーから返された状態コード500
というエラーになります。

半角英数字が使いたいのですがどうしたらいいでしょうか?
よろしくお願いします。

補足日時:2010/04/12 18:46
    • good
    • 0

<>&


↑これを入力すると

※パターン1
 DBの書き込みロジックでエラーが発生

※パターン2
 Post時にエラーが発生し、DBの書き込みロジックにまでたどり着いていない

が考えられます。


#1のtemtecomai2さんが、DBの書き込みロジックを検証してくれているので、パターン2を疑います。



ASPXファイルの先頭に
<%@ Page ~~~~~~ %>
があると思います。

ValidateRequest="false"
を追加してみてください。

それでやってみてどうなりますか?
    • good
    • 0
この回答へのお礼

ValidateRequest="false"をし
読み込みに

TextComment.Text= System.Web.HttpUtility.HtmlEncode(dr("comment")

で表示されました。ありがとうございます。

お礼日時:2010/04/13 23:20

あぁ、これですかね。


http://d.hatena.ne.jp/yourvoice/20051005/1128532 …
テキストボックスに html のタグっぽい物を入力するとエラーになるってやつ。
その aspx の html ソースの先頭にある
<%@ Page Language="VB" ~ %>
の中に ValidateRequest="false" てのを入れてみてください。

ただしこれは入力値のチェックを行わなくする宣言です。
下記ページ等を読んで安全性を確保するようにしてください。
http://msdn.microsoft.com/ja-jp/library/bb355989 …
今回のケースではパラメーター化しているのでザルではないと思いますが。
    • good
    • 0

#3 です。


ValidateRequest="false" はすでに #2 さんが言ってますね。
もし当たりなら #2 さんにポイントをあげてください。私はいりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!