[vb.net] Stringa sql. Tipi di dati

di il
3 risposte

[vb.net] Stringa sql. Tipi di dati

Non mi riconosce l'attributo Importo in questa stringa di select che faccio...Mi connetto ad un database access e poi popolo il dataset. La colonna Importo che c'è sul database è del tipo "valuta". Ho provato anche a metterla del tipo numero decimale ecc ma non mi riconosce l'attributo. Me lo riconosce solo se la colonna del DB è di tipo Numerico e l'attributo che inserisco nella stringa lo trasformo in integer, ma a me serve con i numeri decimali visto che è un campo valuta....adesso posto la mia stringa sql



str = Format(CDec(CboxRicerca.Text), "C")
sql = "SELECT Prodotto , [Ditta Produttrice], ID, Importo, [Scadenza Pagamento], Stato, Note FROM Scadenziario where Importo=' " & str & " ' "

facendo così non mi riconosce l'attributo where...la colonna del DB è nel formato valuta.

Volevo sapere come devo formattare la colonna nel DB e come formattare l'attributo perchè mi venga riconosciuto nella SELECT...

3 Risposte

  • Re: [vb.net] Stringa sql. Tipi di dati

    Potresti utilizzare un parametro:

    assumendo che il tuo "sql" sia la CommandText del tuo OleDbCommand, che "cmd" sia il tuo OleDbCommand e che "valore" sia l'importo (non una stringa)...

    sql="SELECT Prodotto , [Ditta Produttrice], ID, Importo, [Scadenza Pagamento], Stato, Note FROM Scadenziario where Importo = ?"

    e poi con...

    cmd.Parameters.Add("", OleDb.OleDbType.Currency)
    cmd.Parameters(0).Value = valore

    Non ho modo di testare ma penso che dovrebbe funzionare.
    Prova poi fammi sapere.



    SuperCap



    (Le risposte che lascio sono limitate alle mie conoscenze sull'argomento trattato. Quindi potrei anche sbagliare!)
  • Re: [vb.net] Stringa sql. Tipi di dati

    <BLOCKQUOTE id=quote><!--<font size= face="" id=quote>-->quote:<hr height=1 noshade id=quote>
    Potresti utilizzare un parametro:

    assumendo che il tuo "sql" sia la CommandText del tuo OleDbCommand, che "cmd" sia il tuo OleDbCommand e che "valore" sia l'importo (non una stringa)...

    sql="SELECT Prodotto , [Ditta Produttrice], ID, Importo, [Scadenza Pagamento], Stato, Note FROM Scadenziario where Importo = ?"

    e poi con...

    cmd.Parameters.Add("", OleDb.OleDbType.Currency)
    cmd.Parameters(0).Value = valore

    Non ho modo di testare ma penso che dovrebbe funzionare.
    Prova poi fammi sapere.



    SuperCap



    (Le risposte che lascio sono limitate alle mie conoscenze sull'argomento trattato. Quindi potrei anche sbagliare!)
    <hr height=1 noshade id=quote></BLOCKQUOTE id=quote><!--</font id=quote><font face="" size= id=quote>-->



    Scusami ma io non uso l'execute reader...uso questa sub per popolare il mio datagrid...adesso ti posto il codice, forse posso adattarlo alla mia sub il codice che mi hai dato tu se mi puoi spiegare come...ecco il mio codice...

    la stringa sql:
    sql = "SELECT Prodotto , [Ditta Produttrice], ID, Importo, [Scadenza Pagamento], Stato, Note FROM Scadenziario where Importo='" & str & "'"

    e la sub popola datagrid:

    Public Sub Popoladatagrid(ByVal sql As String, ByVal Tbl As String, ByVal dg As DataGrid)


    Dim dSetRicerca As New System.Data.DataSet

    Dim dAdptRicerca As New System.Data.OleDb.OleDbDataAdapter(sql, Cn)

    dAdptRicerca.Fill(dSetRicerca, Tbl)

    If dSetRicerca.Tables(Tbl).Rows.Count = 0 Then
    MessageBox.Show("Non Esiste nessuna Fattura in base all'opzione di ricerca selezionata. Prego ricontrollare il testo.", "Errore...", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
    dg.DataSource = dSetRicerca.Tables(0)
    dtPopola = dSetRicerca.Tables(Tbl)


    Cn.Close()
    End Sub
  • Re: [vb.net] Stringa sql. Tipi di dati

    Purtoppo non ho tempo per tirarti giù il codice, ma il costruttore del OleDbDataAdapter accetta anche un OleDbCommand, per l'istruzione SELECT. Quest'ultimo ha un costruttore dove inserire oltre alla stringa parametrica anche l'OleDbConnection.
    Non ti resta quindi che, creare l'OleDbCommand con il parametro e l'oggetto di connessione, creare l'OleDbDataAdapter e quindi popolare il tuo DataSet.

    Ti incollo queste linee di codice prese da MSDN dove vengono creati i comandi INSERT UPDATE DELETE all'interno trovi il costruttore dell'OleDbDataAdapter di cui ti ho parlato.

    Ciao.

    Public Sub CreateOleDbDataAdapter()
    Dim myOleDbConnection As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" & _
    "Integrated Security=SSPI;Initial Catalog=northwind")
    Dim myOleDbCommand As OleDbCommand = New OleDbCommand("SELECT CustomerID, CompanyName FROM CUSTOMERS", myOleDbConnection)
    Dim custDA As OleDbDataAdapter = New OleDbDataAdapter(myOleDbCommand)
    custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey

    custDA.InsertCommand = New OleDbCommand("INSERT INTO Customers (CustomerID, CompanyName) " & _
    "VALUES (?, ?)", myOleDbConnection)
    custDA.UpdateCommand = New OleDbCommand("UPDATE Customers SET CustomerID = ?, CompanyName = ? " & _
    "WHERE CustomerID = ?", myOleDbConnection)
    custDA.DeleteCommand = New OleDbCommand("DELETE FROM Customers WHERE CustomerID = ?", myOleDbConnection)

    custDA.InsertCommand.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID")
    custDA.InsertCommand.Parameters.Add("@CompanyName", OleDbType.VarChar, 40, "CompanyName")

    custDA.UpdateCommand.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID")
    custDA.UpdateCommand.Parameters.Add("@CompanyName", OleDbType.VarChar, 40, "CompanyName")
    custDA.UpdateCommand.Parameters.Add("@oldCustomerID", OleDbType.Char, 5, "CustomerID").SourceVersion = DataRowVersion.Original

    custDA.DeleteCommand.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID").SourceVersion = DataRowVersion.Original
    End Sub




    SuperCap



    (Le risposte che lascio sono limitate alle mie conoscenze sull'argomento trattato. Quindi potrei anche sbagliare!)
Devi accedere o registrarti per scrivere nel forum
3 risposte