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能够确保我们的连接字符串得到加密,任何在通信中间拦截的人获取了你的连接字符串也是没有用的。

     

  • 相关阅读:
    React-Native: bios打开VT-x选项
    React-Native:解决真机调试时候Could not get BatchedBridge, make sure your bundle is packaged properly
    node.js异步编程的几种模式
    第29章 电容触摸屏—触摸画板
    第28章 LTDC—液晶显示中英文
    第27章 LTDC/DMA2D—液晶显示
    第26章 FMC—扩展外部SDRAM
    第25章 串行FLASH文件系统FatFs
    第24章 QSPI—读写串行FLASH
    第23章 I2C—读写EEPR
  • 原文地址:https://www.cnblogs.com/Creator/p/2051601.html
Copyright © 2011-2022 走看看