分享

在 Visual Studio .NET 中使用 SQL Server 2000 创建数据...

 sumi2005 2012-02-21
简介:
属性设置为 Maintain Customers
  • 调整 DataGrid 控件的大小,使所有的列都可见。
  • 在数据网格下添加一个按钮,将其 Text 属性和 Name 属性更改为 Load
  • 在第一个按钮旁添加另一个按钮,将其 Text 属性和 Name 属性更改为 Update
  • 双击 Load 按钮打开代码窗口,然后向 Load 按钮的单击事件中添加以下代码:
    CustomersDS1.Clear()
    
    SqlDataAdapter1.Fill(CustomersDS1)
    
    
  • Update 按钮的单击事件中,添加以下代码:
    SqlDataAdapter1.Update(CustomersDS1)
    
    

      运行应用程序之前,必须将项目的 Startup 对象更改为 Form2

      更改 Startup 对象

      1. 在解决方案资源管理器中,右键单击 ServiceCall 项目,然后单击 Properties(属性)。
      2. Startup object(启动对象)下,将 Startup 对象更改为 Form2,然后单击 OK(确定)。

      运行应用程序以打开维护窗体 (Form2)。单击 Load 按钮加载带有表中现有数据的数据网格。屏幕应类似于图 20 所示。

      单击此处查看大图像

      图 20:示例应用程序输出结果(单击图片以查看大图像)

      更新 ServiceCall 数据库

      1. 要删除行,请单击该行,然后按 Delete(删除)键。
      2. 要添加新行,请单击网格末尾空行中的任意单元格,然后提供相应的值。
      3. 完成更改后,单击 Update(更新)。

      系统将检查网格中每一行的 RowStatus、调用相应的存储过程并传入正确的参数以处理请求的操作。

      此示例展示了 Visual Studio .NET IDE 和框架的强大功能。我们仅使用了几行代码,就创建了功能完备的表维护应用程序。

      使用 ADO.NET 访问 SQL Server

      Microsoft .NET Framework 提供了名为 ADO.NET 的 ADO 的新版本。ADO.NET 功能得到了增强,能够更好地支持分布式应用程序的开发,并主要依赖 XML 作为其内部数据结构。

      在以前版本的 ADO 中,Recordset 对象是开发人员用于处理来自数据存储的数据的主要对象。在 ADO.NET 中,DataSet 对象取代了 Recordset 对象。DataSet 是用户使用的数据在内存中的副本。DataSet 可以包含一个或多个 DataTables。您可以将 DataSet 视为一个虚拟关系数据库。DataSet 完全独立于原始数据源,而且不是用来与数据源进行直接通信。ADO.NET 是使用托管提供程序与数据源进行通信的。

      ADO.NET 提供两种托管提供程序:一种用于 SQL Server 数据库,另一种用于任何 OLE DB 兼容数据库。到目前为止,我们创建的所有示例都使用了 SQL Server 托管提供程序。如果查看工具箱中 Data(数据)下的选项,您会注意到三对名称相同但前缀不同的控件。下表列出了这三对控件。

      SQL Server OLE DB SqlDataAdapter OLEDBDataAdapter SqlDataConnection OLEDBDataConnection SqlCommand OLEDBCommand

      前缀为 OLEDB 的控件表示 OLE DB 托管提供程序,可用于访问所有与 OLE DB 兼容的数据库。这些控件与当前的 ADO 对象类似,但已被改写为托管代码,因而可以在 .NET Framework 中使用。

      前缀为 SQL 的控件表示 SQL Server 托管提供程序,只能用于 SQL Server。与其 OLE DB 的对应控件相比,这些控件具有一些优点。首先,这些对象使用本地表格数据流 (TDS) 接口以获得最佳性能。OLE DB 对象所需的其他接口层已被删除,这使数据库的访问速度更快。其次,从这些控件中创建的 SQL 对象具有其他一些方法,这些方法利用了专用于 SQL Server 的功能。这为使用 SQL Server 进行设计和编程提供了更大的灵活性。

      我们在前面创建的示例应用程序中使用了 ADO.NET,而 Visual Studio .NET 为我们处理了大多数编码工作,我们所要做的就是通过 IDE 的用户界面配置数据集和数据适配器。现在,让我们看看使用 ADO.NET 从表中选择、插入、更新和删除数据时所需的 Microsoft Visual Basic? .NET 编码。首先看一下 Select 语句的代码:

      Dim strCmdText As String
      
      Dim rowsProcessed As Integer
      
      Dim CustomerDS As New DataSet()
      
      strCmdText = "Select * from Customers"
      
      Dim SqlDataAdapter2 As New SqlDataAdapter(strCmdText, _
      
       "Data Source=localhost;Initial Catalog=ServiceCall;User 
      
         ID=sa;passsword=yourpassword")
      
      SqlDataAdapter2.Fill(CustomerDS, "Customers")
      
      

      在此代码示例中,我们首先定义了要使用的变量和对象,其中包括 CustomersDS,它是一个 ADO.NET DataSet 对象。然后我们定义了查询,该查询将填充变量 strCmdText 中的数据集。下一步,我们定义一个 ADO.NET SqlDataAdapter 对象 (SqlDataAdapter2),将查询和数据库连接字符串作为参数提供。请注意,我们使用的是 SQL Server ADO.NET 托管提供程序。最后,通过调用 SqlDataAdapter 对象的 Fill 方法,填充 CustomerDS 并在名为 CustomersDataSet 中创建一个表。

      因为 SqlDataAdapter2 是使用查询和连接串字符串定义的,所以 Fill 方法将建立到 SQL Server 数据库的连接、执行查询并将结果返回到 DataSet

      下一步,我们将看一看在表中插入行的代码:

       Dim strCmdText As String
      
       Dim rowsProcessed As Integer
      
       Dim sqlConn As New SqlConnection _
      
       ("Data Source=localhost;Initial Catalog=ServiceCall;User 
      
         ID=sa;password=yourpassword")
      
       strCmdText = "INSERT INTO Customers VALUES ('Cust4', 'Customer Four', " _
      
       & "'Cust4 Address', 'City', 'ST', '11111','(888)-123-4567')"
      
       Dim sqlCmd As New SqlCommand(strCmdText, sqlConn)
      
       sqlCmd.Connection.Open()
      
       rowsProcessed = sqlCmd.ExecuteNonQuery()
      
      

      我们首先定义将要使用的对象和变量。然后创建一个 ADO.NET SqlConnection 对象 (sqlConn),并将连接字符串作为参数传递给该对象。然后定义查询,该查询将行插入到变量 strCmdText 中的 Customers 表中。

      下一步,我们定义一个 ADO.NET SqlCommand 对象,并将查询和 SqlConnection 对象作为参数传递给该对象。然后,我们打开 SqlCommand 对象上的连接,并调用 ExecuteNonQuery 方法。ExecuteNonQuery 方法返回数据库操作所影响的行的数目。

      除了传递给 SqlCommand 对象的查询以外,更新和删除表的代码与插入操作的代码基本相同。本文列出了这些代码,但因为它与插入操作的代码相同,所以没有对该代码进行赘述。

      以下代码将更新表中的一行:

       Dim strCmdText As String
      
       Dim rowsProcessed As Integer
      
       Dim sqlConn As New SqlConnection _
      
        ("Data Source=localhost;Initial Catalog=ServiceCall;User 
      
          ID=sa;password=yourpassword")
      
       strCmdText = "Update Customers Set CustomerName = 'Updated Customer' " _
      
         & "Where CustomerID = 'Cust4'"
      
       Dim sqlCmd As New SqlCommand(strCmdText, sqlConn)
      
       sqlCmd.Connection.Open()
      
       rowsProcessed = sqlCmd.ExecuteNonQuery()
      
      

      以下代码将删除表中的一行。

       Dim strCmdText As String
      
       Dim rowsProcessed As Integer
      
       Dim sqlConn As New SqlConnection _
      
        ("Data Source=localhost;Initial Catalog=ServiceCall;User ID=sa")
      
       strCmdText = "Delete Customers Where CustomerID = 'Cust4'"
      
       Dim sqlCmd As New SqlCommand(strCmdText, sqlConn)
      
       sqlCmd.Connection.Open()
      
       rowsProcessed = sqlCmd.ExecuteNonQuery()
      
      

      这些示例展示了如何使用 SqlCommand 对象的 ExecuteNonQuery 方法。SqlCommand 对象还具有其他几个方法,包括专用于 SQL Server 处理 XML 数据的方法。在下一个示例中,我们将介绍它的工作原理。

      XML 和 Visual Studio .NET

      SQL Server 2000 具有对 XML 的内置支持。其中一个功能是 Select 语句中的 For XML 子句,它返回一个作为 XML 的结果集。SqlCommand 对象具有 ExecuteXMLReader 方法,此方法利用 SQL Server 中的这一功能。

      下一个示例将展示 SqlCommand 对象的另一个应用。我们将查询 Customers 表,将结果作为 XML 返回,然后在窗体的文本框中显示该 XML。

      查询 Customers 表并将结果作为 XML 返回

      1. 向项目添加一个新窗体 (Form3) 并向该窗体添加一个文本框。将文本框的 MultiLine 属性更改为 TrueWidth 属性更改为 504Height 属性更改为 152(如图 21 所示)。

        单击此处查看大图像

        图 21:TextBox 属性页(单击图片以查看大图像)

      2. 向窗体添加一个按钮,将此按钮的 Name 属性和 Text 属性更改为 GetXML
      3. 双击该按钮打开单击事件的代码窗口,然后添加以下代码。请记住更改数据源、用户 ID 和密码,使其与您的服务器匹配。
                Dim XMLTxtReader As Xml.XmlTextReader
        
                Dim StringBuilder As New System.Text.StringBuilder()
        
                Dim XMLOutput As String
        
                Dim SQLCommand As New System.Data.SqlClient.SqlCommand()
        
                Dim SQLServiceCallConn As New _
        
                 System.Data.SqlClient.SqlConnection _
        
                 ("Data Source=YourServer;Initial Catalog=ServiceCall;User 
        
                   ID=xx;password=yourpassword")
        
                SQLServiceCallConn.Open()
        
                SQLCommand.Connection = SQLServiceCallConn
        
                SQLCommand.CommandType = CommandType.Text
        
                SQLCommand.CommandText = "Select CustomerID, CustomerName," _
        
                 & "Phone from Customers for XML auto"
        
                ' 执行 SQL 并返回 XML
        
                XMLTxtReader = SQLCommand.ExecuteXmlReader()
        
                StringBuilder.Append(XMLTxtReader.GetRemainder.ReadToEnd)
        
                XMLOutput = StringBuilder.ToString()
        
                Me.TextBox1.Text = XMLOutput
        
        

      您的代码窗口应类似与图 22 所示(数据源、用户 ID 和密码可能会有所不同)。

      单击此处查看大图像

      图 22:带有 GetXML_Click 子例程代码的 Form3 的窗体类(单击图片以查看大图像)

      在此代码示例中,我们首先定义要使用的对象和变量。XMLTextReader 对象用于保存从数据库返回的数据。StringBuilder 对象用于根据 XMLTextReader 对象中的数据创建 XML 字符串。

      首先,我们创建一个 SqlConnection 对象 (SQLServiceCallConn) 并传入数据库的连接参数。然后,设置 SqlCommand 对象 (SqlCommand) 的 CommandType 属性和 CommandText 属性。请注意,我们在查询中使用了 For XML Auto 语句。它指示 SQL Server 将查询结果作为 XML 字符串返回。

      然后,使用 SqlCommand 对象的 ExecuteXmlReader 方法来执行我们的 Transact-SQL 语句。此方法旨在利用 SQL Server 2000 的本地 XML 支持并返回一个 XMLTextReader 对象。最后一步是使用 StringBuilder 对象从 XMLTextReader 对象中提取一个包含从 SQL Server 返回的 XML 的字符串。

      可以通过导入 System.Text 和 System.Data.SqlClient 命名空间来缩短 StringBuilderSqlCommandSqlConnection 对象的完全限定名称(如图 23 所示)。为此,请在窗体类定义上方插入以下代码:

      Imports System.Text
      
      Imports System.Data.SqlClient
      
      

      单击此处查看大图像

      图 23:使用简写表示法定义 StringBuilder 和 SqlConnection 对象的源代码(单击图片以查看大图像)

      要测试该应用程序,请将 Startup 对象更改为 Form3 并运行应用程序(按 F5 键)。单击 GetXMLCustomers 表的内容将作为 XML 返回并显示在文本框中(如图 24 所示)。

      单击此处查看大图像

      图 24:示例应用程序输出结果(单击图片以查看大图像)

      SQLXML 3.0

      在前面的示例中,我们讨论了 SQL Server 对 XML 的内置支持,有时也称其为 SQLXML。SQLXML 3.0 包含以下托管类,可以简化 SQLXML 在 Visual Studio .NET 中的使用。

      类 说明 SqlXmlCommand 对象 将 XML 数据从 SQL Server 返回到一个新的或现有的 Stream 对象,或将数据返回到一个 XMLReader 对象。此对象还包含一个用于创建参数的方法。 SqlXmlParameter 对象 用于填充使用 SqlXMLCommand 对象创建的参数。 SqlXmlAdapter 对象 用 SQL Server 中的 XML 数据填充数据集。此对象还将更新应用于数据集中的 SQL Server 数据。

      这些托管类允许您通过多种方法处理 SQL Server 中的 XML 数据,包括:

      • 执行 SQL 查询以返回 XML 数据
      • 对 XML 数据应用 XSL 转换
      • 对 XML 数据执行 XPath 查询

      对于最后一个示例应用程序,我们将扩展以前的示例,使用 SQLXML 托管类返回 SQL 查询中的 XML 数据。

      重要信息:必须安装 SQLXML 3.0 才能运行此示例应用程序。SQL Server 2000 Web Services 工具包附带了 SQLXML 3.0,也可以从 SQLXML and XML Mapping Technologies(英文)下载 SQLXML 3.0。

      • 本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
        转藏 分享 献花(0

        0条评论

        发表

        请遵守用户 评论公约

        类似文章 更多