Delen via


Stap 3: Proof of concept verbinding maken met SQL met ruby

Dit voorbeeld moet alleen worden beschouwd als een bewijs van concept. De voorbeeldcode is voor duidelijkheid vereenvoudigd en vertegenwoordigt niet noodzakelijkerwijs best practices die door Microsoft worden aanbevolen.

Stap 1: Verbinding maken

De functie TinyTDS::Client wordt gebruikt om verbinding te maken met SQL Database.

    require 'tiny_tds'  
    client = TinyTds::Client.new username: 'yourusername@yourserver', password: 'yourpassword',  
    host: 'yourserver.database.windows.net', port: 1433,  
    database: 'AdventureWorks', azure:true  

Stap 2: Een query uitvoeren

Kopieer en plak de volgende code in een leeg bestand. Noem het test.rb. Voer deze vervolgens uit door de volgende opdracht in te voeren vanaf de opdrachtprompt:

    ruby test.rb  

In het codevoorbeeld wordt de functie TinyTds::Result gebruikt om een resultatenset op te halen uit een query op SQL Database. Deze functie accepteert een query en retourneert een resultatenset. De resultatenset wordt doorgelopen met behulp van result.each do |row|.

    require 'tiny_tds'    
    print 'test'       
    client = TinyTds::Client.new username: 'yourusername@yourserver', password: 'yourpassword',  
    host: 'yourserver.database.windows.net', port: 1433,  
    database: 'AdventureWorks', azure:true  
    results = client.execute("SELECT c.CustomerID, c.CompanyName,COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC")  
    results.each do |row|  
    puts row  
    end  

Stap 3: Een rij invoegen

In dit voorbeeld ziet u hoe u een INSERT-instructie veilig uitvoert, parameters doorgeeft die uw toepassing beschermen tegen SQL-injectiewaarde .

Als u TinyTDS wilt gebruiken met Azure, wordt u aangeraden verschillende SET instructies uit te voeren om te wijzigen hoe de huidige sessie specifieke informatie verwerkt. Aanbevolen SET statements worden geleverd in het codevoorbeeld. Nieuwe kolommen gemaakt met SET ANSI_NULL_DFLT_ON zullen bijvoorbeeld null-waarden toestaan, zelfs als de nullbaarheid van de kolom niet expliciet wordt vermeld.

Als u wilt uitlijnen met de datum/tijd-indeling van Microsoft SQL Server, gebruikt u de strftime-functie om te casten naar de bijbehorende datum/tijd-indeling.

    require 'tiny_tds'  
    client = TinyTds::Client.new username: 'yourusername@yourserver', password: 'yourpassword',  
    host: 'yourserver.database.windows.net', port: 1433,  
    database: 'AdventureWorks', azure:true  
    results = client.execute("SET ANSI_NULLS ON")  
    results = client.execute("SET CURSOR_CLOSE_ON_COMMIT OFF")  
    results = client.execute("SET ANSI_NULL_DFLT_ON ON")  
    results = client.execute("SET IMPLICIT_TRANSACTIONS OFF")  
    results = client.execute("SET ANSI_PADDING ON")  
    results = client.execute("SET QUOTED_IDENTIFIER ON")  
    results = client.execute("SET ANSI_WARNINGS ON")  
    results = client.execute("SET CONCAT_NULL_YIELDS_NULL ON")  
    require 'date'  
    t = Time.now  
    curr_date = t.strftime("%Y-%m-%d %H:%M:%S.%L")  
    results = client.execute("INSERT SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate)  
    OUTPUT INSERTED.ProductID VALUES ('SQL Server Express New', 'SQLEXPRESS New', 0, 0, '#{curr_date}' )")  
    results.each do |row|  
    puts row  
    end