步骤 3:使用 Ruby 连接到 SQL 的概念证明
应只将此示例视为概念证明。 为清楚起见,示例代码已简化,不一定代表 Microsoft 建议的最佳做法。
步骤 1:连接
TinyTDS::Client 函数用于连接到 SQL 数据库。
require 'tiny_tds'
client = TinyTds::Client.new username: 'yourusername@yourserver', password: 'yourpassword',
host: 'yourserver.database.windows.net', port: 1433,
database: 'AdventureWorks', azure:true
步骤 2:执行查询
复制以下代码并将它粘贴到空文件中。 将文件命名为 test.rb。 然后,在命令提示符下输入以下命令以执行该文件:
ruby test.rb
在代码示例中,TinyTds::Result 函数用于检索针对 SQL 数据库执行的查询所返回的结果集。 此函数接受查询并返回结果集。 可使用 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
步骤 3:插入行
此示例展示了如何安全执行 INSERT 语句,并传递用于保护应用程序免遭 SQL 注入值影响的参数。
若要配合使用 TinyTDS 和 Azure,建议运行多个 SET
语句来更改当前会话处理特定信息的方式。 建议使用代码示例中所提供的 SET
语句。 例如,即使未显式指定列的可为 null 状态,通过 SET ANSI_NULL_DFLT_ON
依然可以创建新列来允许 null 值。
为符合 Microsoft SQL Server 日期时间格式,请使用 strftime 函数转换成对应的日期时间格式。
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