webForumDet fria alternativet

Operationen måste använda en fråga som kan uppdateras....

.NET

7 svar · 357 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Vad är fel?
Jag har skrivrättigheter i katalogen osv.

       Public Sub upd_db(sender As Object, e As System.EventArgs)
        Dim str as string = msg.text
            Dim conn As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("\testar\db2.mdb"))
            Dim cmd As New OleDb.OleDbCommand("set_posts", conn)
            cmd.commandtype = commandtype.storedProcedure
            Dim objParam as OleDbParameter
            objParam = cmd.Parameters.Add("@rubrik", OleDbType.Char)
            objParam.direction = ParameterDirection.Input
            objParam.Value = str
            
            Try
                conn.Open()
                cmd.ExecuteNonQuery()
                msg.text = "OK!"
            Catch ex As OleDbException
                msg.text = ex.tostring()
            Finally
                conn.Close()
            End Try
            conn.Close()
        End Sub
Medlem sedan juli 20022 537 inlägg
#2

Ge ASPNET-kontot (Win XP) eller NETWORK SERVICE (Win 2003) skrivrättigheter på mappen.

Medlem sedan okt. 20041 556 inlägg
#3

Ok var gör jag det?

Medlem sedan okt. 20041 556 inlägg
#4

Ok, det var ju inte så svårt, jag högerklickade på mappen och ändrade lite rättigheter på det kontot.

BTW. finns det inget smidigare sätt att göra en insert?
I classic asp så skulle man kunna göra typ så här: (kvasi-kod)

Dim conn As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("\testar\db2.mdb"))
            Dim cmd As New OleDb.OleDbCommand("[b]set_posts '" & parameter & "'[/b]", conn)
conn.Open()
                cmd.ExecuteNonQuery()
conn.Close()

Går inte det i .net?

Medlem sedan dec. 19996 721 inlägg
#5

Travoni skrev:

Ok, det var ju inte så svårt, jag högerklickade på mappen och ändrade lite rättigheter på det kontot.

BTW. finns det inget smidigare sätt att göra en insert?
I classic asp så skulle man kunna göra typ så här: (kvasi-kod)

Dim conn As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("\testar\db2.mdb"))
            Dim cmd As New OleDb.OleDbCommand("[b]set_posts '" & parameter & "'[/b]", conn)
conn.Open()
                cmd.ExecuteNonQuery()
conn.Close()

Går inte det i .net?

Jovisst. Men det är inte bra att skicka in SP-parametrar via kommando-texten....

Medlem sedan okt. 20041 556 inlägg
#6

Varför kompis?

Medlem sedan dec. 19996 721 inlägg
#7

Tänkte komma till det, men det kom lite emellan....

Det finns två huvudanledningar

1. Man ökar risken för SQL injection, eftersom det blir en potentiellt farlig sträng som man exekverar
2. SP:ar är optimerade för att anropas med satta parametrar, och man tappar prestanda om man exekverar dem som text, eftersom SQL server då (oftast) inte kan hitta en kompilerad version av frågan i cachen. Lite förenklat uttryckt.

Medlem sedan okt. 20041 556 inlägg
#8

Tack, bra förklarat.

/T.

251 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)