-1

主に安全上の理由から、クエリをパラメーター化する必要があることを知っており、そのための支援が必要です。Visual Studio 2012 と SQL Server 2012 で VB を使用しています。これまでにこれを行ったことがなく、Web で見つけたものはすべて、特定のコードには適していないようです。作業が必要だと思うビットは次のとおりです。

objconnection.Open()

    strSQL = "insert into dbo.Event(ID, Name, Summary, Date) values (NEWID(), '" & strName & "','" & strSummary & "','" & strLocation & "','" & strDate & "')"
    objcmd = New OleDbCommand(strSQL, objconnection)
    objcmd.ExecuteNonQuery()
    objconnection.Close()
    MsgBox("Event Created", vbMsgBoxSetForeground)

どんなポインタでも大歓迎です。さらにコードが必要な場合はお知らせください。

コメントから:

私はそれを見て試してみましたが、問題がありました。この部分で:

.add(new SqlParameter("@strname", '"& strName &"'))

「@streventname」と「strName」の間の に下線が引かれ、Expression expected.

また

Dim cmd As SqlCommand = New SqlCommand(cmdText, objconnection)

objconnection で、「型 'System.Data.OleDb.OleDbConnection' の値を 'System.Data.SqlClient.SqlConnection' に変換できません。

おそらく私が見逃したばかげた何か。

4

3 に答える 3

5

SQL オブジェクトと OLEDB オブジェクトを混在させています。OLEDB接続を使用しているように見えるため、OLEDBオブジェクトを使用する必要があるため、SqlCommandの代わりにOleDbCommandを使用するなど.

パラメータ行は次のようになります。

.add(new OleDbParameter("@strname", strName))

OleDB クエリの場合、パラメーターは実際には名前@strnameを無視し、パラメーター情報をインデックス順に更新しているだけであることを理解することが重要です。そのため、SQL ステートメントでパラメーターが表示される順序は、パラメーターを指定した順序と同じである必要があります。

于 2013-09-18T16:23:20.133 に答える
1

助けてくれてありがとう。私はそれを解決することができました。誰かが興味を持っているなら、これは私が今持っているものです。

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim strName As String = Request.Form("txtName")
        Dim strSummary As String = Request.Form("txtSummary")
        Dim strDate As String = Request.Form("txtDate")

        Dim objconnection As OleDbConnection = Nothing
        Dim objcmd As OleDbCommand = Nothing
        Dim strconnection As String, strSQL As String

        strconnection = "provider=SQLOLEDB;data source=XXX;database=Events;uid=XXX;pwd=XXX;"

        objconnection = New OleDbConnection(strconnection)
        objconnection.ConnectionString = strconnection

        objconnection.Open()

        strSQL = "insert into dbo.CreateApp(ID, Name, Summary, Date)values(NEWID(), ?, ?, ?)"
        objcmd = New OleDbCommand(strSQL, objconnection)
        objcmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@Name", strName))
        objcmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@Summary", strSummary))   
        objcmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("@Date", strDate))
        objcmd.ExecuteNonQuery()

        objconnection.Close()

    End Sub
End Class

キーは ?s を入れることでした。

于 2013-09-19T15:06:37.137 に答える
0

SQLが間違っているという事実を見逃していることを除いて、Larsに同意します。より完全な例を次に示します。

    Dim sql = <value>insert into dbo.Event(ID, Name, Summary, Date) values (NEWID(),@Name,@Summary,@Date)</value>

    Using connection As OleDb.OleDbConnection(connectionString)
        Using command As New OleDb.OleDbCommand(sql.Value, connection)
            command.Parameters.AddWithValue("@Name", nameValue)
            command.Parameters.AddWithValue("@Summary", summaryValue)
            command.Parameters.AddWithValue("@Date", DateValue)

            command.ExecuteNonQuery()
        End Using
    End Using 

ADO に煩わされず、よりシンプルなものを探している場合は、Simple.Data http://simplefx.org/simpledata/docs/を使用することをお勧めします。これは、SQL や ADO を使用せずにデータベースと対話する最も簡単な方法の 1 つですが、確かに役に立ちます。

幸運を

于 2013-09-18T22:52:50.967 に答える