创建 Azure 数据库并通过 C# 使用它





5.00/5 (4投票s)
在这篇短文中,我们将了解如何使用 Microsoft Azure 云平台提供的服务创建 SQL 数据库,然后通过 C# 代码连接到它,以执行常规的数据插入和检索操作。
范围
在这篇短文中,我们将了解如何使用 Microsoft Azure 云平台提供的服务创建 SQL 数据库,然后通过 C# 代码连接到它,以执行常规的数据插入和检索操作。
必备组件
为了能够重现文章中将要展示的内容,您必须具备:
- 一个 Azure 订阅 (提供用于测试该服务的积分)
- Visual Studio 2013 更新 4 或更高版本
在 Azure 上创建数据库
首先,我们将访问网站 https://portal.azure.com/ 。该页面将重定向到一个页面,允许我们通过注册时使用的电子邮件地址和密码对服务进行身份验证。我们将看到我们的 Azure 仪表板,这是用于执行门户中所有可用操作的控制面板。
您会注意到,在左侧边栏中,有 “SQL 数据库” 条目。单击它以访问其配置页面。最初显然是空的,在同一页面的顶部有一个 “添加” 按钮。按下它以开始创建我们的数据库。
在下面的示例中,我们将创建一个名为 TechNet_Test 的数据库。正如您所注意到的,您需要定义一些初步参数。首先,我们的数据库显然必须驻留在服务器上,并且 - 如果我们还没有创建它 - 在此部分中,我们可以初始化一个新服务器,该服务器 - 如下图所示 - 将通过 <SERVER>.Database.windows.net 访问,其中 <SERVER> 是我们选择的名称,并附带指定的凭据。数据库有不同的费率计划,每种计划都有相应的性能和资源。在我们的例子中,由于这是一个简单的测试,我们将选择 基本 费率计划,该计划允许数据库大小高达 2GB。完成指定所需选项后,只需按 “创建” 按钮即可继续创建数据库及其服务器。“添加到仪表板”复选框会创建一个指向仪表板上数据库的有用链接,这将在打开门户时看到。
因此,我们将等待数据库创建完成。门户顶部栏上的通知将在数据库创建时通知我们。这是一个可能需要几分钟的操作。
此时,再次单击 “SQL 数据库” ,我们将在列表中看到我们的 TechNet_Test 数据库。单击它将打开其参数窗口。
我们特别关注 “显示数据库连接字符串” 选项,因为此命令将公开用于我们程序以帮助引用先前创建的实例/数据库的连接字符串。另请注意顶部工具栏中的 “工具” 按钮。在此视图中,它公开了 “在 Visual Studio 中打开” 命令,该命令允许在 Visual Studio 中打开服务器实例以进行日常维护,通过稍后上传的 SQL 脚本进行。
使用 Visual Studio 编辑数据库
使用 “在 Visual Studio 中打开” 命令,将打开一个额外的窗口,允许我们确认操作并配置 Azure 防火墙。这对于控制访问尤为重要:事实上,如果平台尚未配置为允许访问特定地址,则对该实例的各种调用将不会成功完成。
单击 “配置防火墙” ,然后定义相关的规则。在这种情况下,我们定义了一个简单的规则,名为 “Home” ,该规则仅允许访问我们当前使用的 IP。保存规则后,可能需要几分钟才能实际访问该实例。
此时,我们可以单击 “在 Visual Studio 中打开” 。系统将提示我们输入在创建服务器时指定的凭据,输入后我们将最终访问我们的数据库。此时,我们将在左侧边栏中看到 TechNet_Test 数据库,并且我们可以 - 通过右键单击 - 执行添加新表的( “添加新表” )操作。然后,我们将注意到 IDE 已准备好允许通过方便的网格指示数据库的组成字段,该网格也可以通过更改出现的脚本来更改,该脚本位于下部窗口中。
正如您在图像中看到的,为了演示目的,选择创建一个绝对简单的表。该表 “Example” 只有两列,分别称为 Id 和 Nominativo,其中第一列是表的主键。一旦对表满意, “更新” 按钮允许将脚本发送到 Azure,将在其上运行,从而实际创建我们的表。
上面的弹出窗口显示了将在服务器端运行的内容。按 “更新数据库” 按钮开始我们客户端和 Azure 之间的通信。
使用 Management Studio 编辑数据库
为了编辑我们的数据库,不必也不强制使用 Visual Studio。例如,如果您愿意,可以使用 Management Studio。在这种情况下,只需启动程序,然后输入登录信息,使服务器名称成为我们在 Azure 上的服务器地址,用户名为 <USER> @ <SERVER> 格式,密码与在 Azure 上创建服务器时设置的密码相同。
此处所做的任何更改都将使用 T-SQL 语法从相应的 “新建查询” 菜单进行。
通过 C# 代码访问数据库
现在让我们看一些简单的代码片段来连接到我们的 Azure 数据库。我们将使用 System.Data.SqlClient 命名空间,它提供了适用于此目的的有效类。
建立连接
我们创建一个新的 C# WinForms 项目(任何 C# 项目类型都可以)。创建简单打开和后续关闭我们数据库的代码片段可以表示为:
using System;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection connessione = new SqlConnection("Server=tcp:XXXXX.database.windows.net,1433;Database=TechNet_Test;User ID=XXXXXX;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
connessione.Open();
connessione.Close();
}
}
}
只需声明一个 SqlConnection 类的对象,并使用 Azure 称为 “ADO.NET” 的连接字符串对其进行初始化,当然还要注意输入正确的服务器名称、用户名和密码。通过运行此程序,将执行对平台的调用,打开 TechNet_Test 数据库,然后关闭。
插入一条记录
要将记录插入我们的表中,我们将使用 SqlCommand 类,并结合已经介绍过的 SqlConnection 。鉴于上述表视图的结构,我们可以使用如下结构向 Example 表中插入一条记录:
SqlConnection connessione = new SqlConnection("Server=tcp:XXXXX.database.windows.net,1433;Database=TechNet_Test;User ID=XXXXXX;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
connessione.Open();
SqlCommand cmd = new SqlCommand(@"INSERT INTO Esempio (Id, Nominativo)
VALUES (@Id, @Nominativo)", connessione);
cmd.Parameters.Add(new SqlParameter("Id", 1));
cmd.Parameters.Add(new SqlParameter("Nominativo", "MARIO ROSSI"));
cmd.ExecuteNonQuery();
connessione.Close();
连接照常打开,然后使用合适的 T-SQL 语句初始化属于 SqlCommand 类的变量。注意使用 SqlParameter 类以安全的方式将参数传递给查询,以避免转义问题或 SQL 注入。 ExecuteNonQuery() 方法要求您运行以下命令而不返回任何返回值。
最后,我们结束连接。
读取表的内容
现在我们想检查远程表中已写入的内容。我们将编写代码来打开连接,执行对表记录的选择而不加任何区分,并将每个记录的列数据组合成一个字符串,由 MessageBox 显示。
我们可以通过以下方式实现此功能:
SqlConnection connessione = new SqlConnection("Server=tcp:XXXXX.database.windows.net,1433;Database=TechNet_Test;User ID=XXXXXX;Password={your_password_here};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;");
connessione.Open();
SqlCommand cmd = new SqlCommand(@"SELECT * FROM Esempio", connessione);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
String retVal = dr.GetInt32(0).ToString() + " " + dr.GetString(1);
MessageBox.Show(retVal);
}
}
dr.Close();
connessione.Close();
我们仍然打开连接,并声明一个命令,这次是选择命令。在这种情况下,命令执行肯定会返回我们想要处理的值。为此,我们将使用 ExecuteReader() 方法,该方法返回一个 SqlDataReader 类的对象,该对象对于遍历返回的数据很有用。首先,我们验证记录返回后,结构是否真的有显示的行(属性 dr.HasRows,布尔值)。如果是,我们执行 Read() 方法,该方法也是布尔值,只要还有行可读,它就返回 True ,在它们结束时返回 False 。根据此方法的返回值,我们将围绕一个循环,在其中处理每次执行 Read() 方法使我们可用的值。
请注意,首先使用 GetInt32 方法,然后使用 GetString 方法来组合 retVal 字符串。这些方法允许根据传递给方法本身的序数来提取列值。由于在我们的示例中,第一个字段 Id 表是一个整数,而第二个字段 - Nominativo - 是一个字符串,因此我们将分别使用索引为零的 GetInt32 方法和索引为一的 GetString 方法来正确读取值。
组合字符串后,我们将使用 MessageBox 在屏幕上显示它。执行结果将是:
结论
在本篇文章中,我们快速了解了使用 SQL Azure 数据库的基础知识,并结合 Microsoft 提供的工具以及 ad hoc 开发的代码。我们邀请读者进一步探索所列工具的潜力,以创建他们所需的解决方案,还可以利用下面的参考书目以获取更多详细信息。
参考文献
其他语言
本文也有以下本地化版本