Voici mon codecommande SQL ne peut pas être convertie en chaîne
Je semble obtenir une erreur SQL command cannot be converted to string
avec ce code
Dim LogData2 As sterm.markdata = New sterm.markdata()
Dim query As New SqlCommand("Select * from openquery (db, 'SELECT * FROM table WHERE [email protected]')")
query.Parameters.AddWithValue("@person", Session("number"))
Dim drCode2a As DataSet = LogData2.StermQ3(query)
dgBookings.DataSource = drCode2a.Tables(0).DefaultView
dgBookings.DataBind()
J'ai essayé d'ajouter dans un Convert.ToString
comme celui-ci
Dim drCode2a As DataSet = LogData2.StermQ3(Convert.ToString(query))
Et maintenant je reçois cette erreur
Could not find server 'System' in sysservers. Execute sp_addlinkedserver to add the server to sysservers
Je suis évidemment en train de faire quelque chose de mal, mais je ne sais pas quoi - ASP.Net et SQL est tout nouveau pour moi, toute aide serait très appréciée.
code source de StermQ3
StermQ3(String) As System.Data.DataSet
Public Function StermQ3(ByVal strSQL6 As String) As System.Data.DataSet
MISE À JOUR
code source tel qu'il est après quelques modifications ont été apportées
Sub Page_Load(ByVal Sender as Object, ByVal e as EventArgs)
Dim LogData2 As sterm.markdata = New sterm.markdata()
Dim query As New SqlCommand("Select * from openquery (db, 'SELECT * FROM table WHERE [email protected]')")
query.Parameters.AddWithValue("@person", Session("number"))
query.CommandType = CommandType.StoredProcedure
query.CommandText = "openquery"
Dim drCode2a As DataSet = LogData2.StermQ3(Convert.ToString(query))
dgBookings.DataSource = drCode2a.Tables(0).DefaultView
dgBookings.DataBind()
End Sub
HTML est
<asp:DataGrid id="dgBookings" runat="server" AutoGenerateColumns="true" ShowHeader="true">
</asp:DataGrid>
chemin Je l'habitude de faire ma requête
Dim query As String = "Select * from openquery (db, 'SELECT * FROM table WHERE investor=''" + Session("number") + "'' ')"
Cela fonctionne si je remplace mon commandement SQL mais il est ouvert à injection SQL
MISE À JOUR
J'ai maintenant il travailler sans les paramètres bit voici mon code de souce mis à jour toute idée pourquoi il ne va pas ajouter la valeur du paramètre?
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = @investor ') ", conn)
query.Parameters.AddWithValue("@investor", 69836)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
Il fonctionne comme ceci
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = 69836') ", conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
Toutes les idées?
SOLUTION
Voici comment je résolu mon problème
Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
Merci pour toute l'aide
Avez-vous débogué pour savoir ce que fait StermQ3? Vous passez la référence de chaîne d'un SqlCommand-Object à ce qui pourrait être un non-sens. Je pense que vous avez besoin de sa propriété "CommandText", mais vous avez un problème car vous n'obtenez pas réellement le texte SQL qui est exécuté sur la base de données. Les paramètres sont évalués dans la base de données et non ici. –