zoukankan      html  css  js  c++  java
  • 使用 ADO.NET连接SQL Azure

          使用ADO.NET连接Microsoft SQL Azure Database 现在已经变得非常容易,这篇文章提供一个示例控制台程序来描述如何连接到Azure 的数据库,中间还夹杂着几个我认为连接Microsoft SQL Azure Database 的一些注意点。属于SQL Azure入门级问题。呵呵,Azure达人可以绕过。

    控制台程序示例:

    1.使用vs创建一个控制台程序

    2.将上述代码中<ProvideUserName>替换为SQL Azure Database 登录名,格式如login@server,如果你需要了解更多有关账户的信息可以查阅Managing Databases and Logins in SQL Azure一文。

    3.替换<ProvidePassword>为你的账户密码。

    4.替换<ProvideServerName>为你的SQL Azure 服务器名,如servername.database.windows.net,与登陆格式‘@“符号后面部分应该是一样的。

    5.<ProvideDatabaseName>即是你想用你的代码创建的数据库名(原来不存在的)。

    代码如下:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;

    namespace Microsoft.SDS.Samples
    {
    class Program
    {
    // Provide the following information
    private static string userName = "<ProvideUserName>";
    private static string password = "<ProvidePassword>";
    private static string dataSource = "<ProvideServerName>";
    private static string sampleDatabaseName = "<ProvideDatabaseName>";

    static void Main(string[] args)
    {
       
    // Create a connection string for the master database
        SqlConnectionStringBuilder connString1Builder;
        connString1Builder
    = new SqlConnectionStringBuilder();
        connString1Builder.DataSource
    = dataSource;
        connString1Builder.InitialCatalog
    = "master";
        connString1Builder.Encrypt
    = true;
        connString1Builder.TrustServerCertificate
    = false;
        connString1Builder.UserID
    = userName;
        connString1Builder.Password
    = password;

       
    // Create a connection string for the sample database
        SqlConnectionStringBuilder connString2Builder;
        connString2Builder
    = new SqlConnectionStringBuilder();
        connString2Builder.DataSource
    = dataSource;
        connString2Builder.InitialCatalog
    = sampleDatabaseName;
        connString2Builder.Encrypt
    = true;
        connString2Builder.TrustServerCertificate
    = false;
        connString2Builder.UserID
    = userName;
        connString2Builder.Password
    = password;

       
    // Connect to the master database and create the sample database
        using (SqlConnection conn = new SqlConnection(connString1Builder.ToString()))
        {
           
    using (SqlCommand command = conn.CreateCommand())
            {

                conn.Open();

               
    // Create the sample database
                string cmdText = String.Format("CREATE DATABASE {0}",
                                                sampleDatabaseName);
                command.CommandText
    = cmdText;
                command.ExecuteNonQuery();
                conn.Close();
            }
        }

       
    // Connect to the sample database and perform various operations
        using (SqlConnection conn = new SqlConnection(connString2Builder.ToString()))
        {
           
    using (SqlCommand command = conn.CreateCommand())
            {
                conn.Open();

               
    // Create a table
                command.CommandText = "CREATE TABLE T1(Col1 int primary key, Col2 varchar(20))";
                command.ExecuteNonQuery();

               
    // Insert sample records
                command.CommandText = "INSERT INTO T1 (col1, col2) values (1, 'string 1'), (2, 'string 2'), (3, 'string 3')";
               
    int rowsAdded = command.ExecuteNonQuery();

               
    // Query the table and print the results
                command.CommandText = "SELECT * FROM T1";

               
    using (SqlDataReader reader = command.ExecuteReader())
                {
                   
    // Loop over the results
                    while (reader.Read())
                    {
                        Console.WriteLine(
    "Col1: {0}, Col2: {1}"
                                        reader[
    "Col1"].ToString().Trim(), 
                                        reader[
    "Col2"].ToString().Trim());
                    }
                }

               
    // Update a record
                command.CommandText = "UPDATE T1 SET Col2='string 1111' WHERE Col1=1";
                command.ExecuteNonQuery();

               
    // Delete a record
                command.CommandText = "DELETE FROM T1 WHERE Col1=2";
                command.ExecuteNonQuery();

               
    // Query the table and print the results

                Console.WriteLine(
    "\nAfter update/delete the table has these records...");

                command.CommandText
    = "SELECT * FROM T1";

               
    using (SqlDataReader reader = command.ExecuteReader())
                {
                   
    // Loop over the results
                    while (reader.Read())
                    {
                        Console.WriteLine(
    "Col1: {0}, Col2: {1}"
                                        reader[
    "Col1"].ToString().Trim(), 
                                        reader[
    "Col2"].ToString().Trim());
                    }
                }

                conn.Close();
            }
        }
        Console.WriteLine(
    "Press enter to continue...");
        Console.ReadLine();
    }
    }
    }

     

    现在我们来看看这段代码干了些什么

    1.首先,代码使用SqlConnectionStringBuilder对象来连接SQL Azure Database的master数据库,然后以sampleDatabaseName字符串值为名来创建一个数据库

    2.使用另一个SqlConnectionStringBuilder对象来连接到第一步创建的数据库

    3.一旦连接上SQL Azure Database 里面刚创建的数据库,我们使用第二个SqlConnectionStringBuilder来创建数据库表以及一些示例数据操作

    4.最后,代码在数据修改前和修改后返回数据到控制台程序

    如果大家想阅读连接SQL Azure的一些具体细节信息,可以参阅Connecting to a Data Source (ADO.NET)

     

    注意点:

    通过以上的例子,我们已经对连接SQL Azure有了一些基本认识,现在我们来讨论一下这之间我们需要注意的一些小问题

    • 为了避免遭受注入攻击,我们使用SqlConnectionStringBuilder类,这也是.net framework框架自带的类
    • 我们需要很好的保护我们的连接字符串信息,如果让别人知道了,他们可以使用我们的数据并且进行篡改等等一切毁灭性的损失
    • 由于我们与SQL Azure通信过程中,这之间不知道要经过多少个路由节点,为了保护我们的连接字符串不被别人盗用,所以我们最好设置ADO.NET Encrypt 和 TrustServerCertificate connection parameters,如代码所示将Encrypt = True,TrustServerCertificate = False能够确保我们的连接字符串得到加密,任何在通信中间拦截的人获取了你的连接字符串也是没有用的。

     

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/Creator/p/2051601.html
Copyright © 2011-2022 走看看