1. 简介
在开发窗体应用程序时,经常需要连接数据库。Microsoft SQL Server是一个流行的关系数据库管理系统(RDBMS),在许多企业和组织中广泛使用,因此我们需要学习如何将MSSQL与窗体应用程序连接起来。
2. 数据库连接方式
2.1 Windows身份验证连接方式
Windows身份验证(Integrated Security)是一种使用当前Windows操作系统登录用户的验证方式。这种方法是默认的方法,因为其安全性和方便性。我们可以通过Sting连接字符串来实现这种连接方式:
"Data Source=服务器名;Initial Catalog=数据库名;Integrated Security=SSPI;"
其中,Data Source指定数据库所在的服务器,Initial Catalog指定连接的数据库名,Integrated Security设置为SSPI即可。
弊端是,受限于操作系统的账户才能连接到数据库。
2.2 SQL Server身份验证连接方式
SQL Server身份验证是一种通过用户名和密码验证方式来连接MSSQL数据库的一个方法。这种方式需要我们在数据库中创建一个登录账户,然后通过该账户来进行验证。我们也可以通过Sting连接字符串来实现这种连接方式:
"Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Password=密码;"
其中,Data Source指定数据库所在的服务器,Initial Catalog指定连接的数据库名,User ID为登录账户的用户名,Password为登录账户的密码。
通过SQL Server身份验证进行连接会增强我们的身份验证过程,因为它需要输入用户名和密码,一旦被窃取,就不会将其它系统和平台(除MSSQL外)暴露给攻击者。
3. 连接数据库
3.1 SqlConnection
在Visual Studio中,我们可以使用SqlConnection类进行MSSQL数据库的连接。通过SqlConnection类的构造函数创建一个数据库连接对象,在每次操作数据库时对其进行打开和关闭。编写连接数据库的代码如下:
SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=MyDataBase;User ID=sa;Password=sa");
conn.Open();
//进行数据库操作 ...
conn.Close();
这里使用的SQL Server身份验证方式,服务器名为本地机器localhost,数据库名为MyDataBase,用户名和密码均为sa。
3.2 SqlCommand
我们可以使用SqlCommand对象执行SQL查询和命令。SqlCommand对象被初始化,然后设置其CommandText属性为要执行的SQL命令。接着,我们可以使用ExecuteReader方法从数据库中读取数据流。下面是一个示例代码:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM MyTable", conn))
{
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Console.WriteLine("{0} {1}", rdr.GetInt32(0), rdr.GetInt32(1));
}
}
}
}
该示例所用到的是SELECT语句,使用ExecuteReader方法打开并读取SQL命令返回的数据流。由于DataReader始终与连接相关联,因此此代码使用using语句来确保DataReader和SqlConnection对象在代码块完成后被释放。
4. 使用DataSet填充数据
DataSet由DataTable对象的集合以及从数据库中查询的关系数据组成。它是.NET中操作数据库中查询结果的主要机制之一。DataSet还提供了一种机制来跟踪通过数据适配器更新到数据库中的数据更改。下面是一个填充数据集的代码实例:
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM MyTable", conn);
DataSet ds = new DataSet();
adapter.Fill(ds, "MyTable");
foreach (DataRow row in ds.Tables["MyTable"].Rows)
{
Console.WriteLine("{0} {1}", row["Col1"], row["Col2"]);
}
}
这段代码将数据适配器实例化,然后使用Fill方法将数据填充到DataSet对象中。最后,通过循环遍历DataSet对象中的数据,即可读取到数据库中的每一行记录。
5. 总结
本文介绍了如何使用C#编写代码来连接MSSQL数据库,并通过示例代码演示了如何使用SqlConnection和SqlCommand类查询数据库。另外,通过使用DataSet对象,我们也可以很方便地将查询到的数据填充到一个数据集中。这些技巧对于编写窗体应用程序并与数据库交互都是至关重要的。