无法连接使用MonoTouch的到SQL Azure的数据库(can't connect t

2019-09-26 16:06发布

我使用C#和MonoTouch的一个iphone项目。 我需要使用SQL Azure数据库。 我的问题是,我似乎无法使用MonoTouch的得到连接。 我可以做以下做工精细的代码使用的Visual Studio 2012上使用Windows内置8位机的本地控制台应用程序但是,当我尝试将它移植到一台iMac和使用的MonoDevelop / MonoTouch的我的iPhone应用程序崩溃。 我得到的错误是:

System.NotImplementedException:客户端和服务器之间发送的数据SSL加密未实现。

我谷歌了一下周围,发现似乎来形容我的确切问题的bug报告在这里 。 我注意到它的快两岁了,所以我不知道这仍然是未实现的。

所以,我试图改变StringBuilder.Encrypt的值= TRUE; 为false。 但是,它仍然崩溃,我得到的错误:

Mono.Data.Tds.Protocol.TdsInternalException:服务器关闭了连接。 ---> System.IO.IOException:连接丢失

在两种情况下,应用程序崩溃时conn.Open(); 叫做。

我很坚持,我没有选择,只能使用SQL Azure的。 因此,如果任何人都可以提出一个解决方案或解决了我的问题,我会非常感激。 提前致谢!

        string userName = "<username>@<myservername>";
        string password = "<password>";
        string dataSource = "<myservername>.database.windows.net";
        string databaseName = "<dbname>";

        SqlConnectionStringBuilder connStringBuilder;
        connStringBuilder = new SqlConnectionStringBuilder();
        connStringBuilder.DataSource = dataSource;
        connStringBuilder.InitialCatalog = databaseName;
        connStringBuilder.Encrypt = true;
        connStringBuilder.TrustServerCertificate = false;
        connStringBuilder.UserID = userName;
        connStringBuilder.Password = password;


        using (SqlConnection conn = new SqlConnection (connStringBuilder.ToString())) {

            conn.Open();

            using (IDbCommand dbcmd = conn.CreateCommand()){
                string sql = "Select client_username from dbo.client;";
                dbcmd.CommandText = sql;
                using (IDataReader reader = dbcmd.ExecuteReader()){
                    while( reader.Read() ){
                        string username = (string) reader["client_username"];
                    }
                }
            }
        }

Answer 1:

SSL为SqlConnection类未实现。 见SqlConnection.cs

而作为Azure的要求加密连接,你必须做一些变通。 例如,你可以创建一个Web角色和揭露其执行代表你的SQL Web服务。



Answer 2:

尝试使用简单的字符串作为连接字符串:

        connStr = "Server=tcp:<server_here>.database.windows.net,1433;Database=<db_name_here>;Trusted_Connection=False;Encrypt=True;TrustServerCertificate=False;UserID=<user_name_here>@<server_name_here>;Password=<password_here>";

        using (SqlConnection conn = new SqlConnection (connStr)) {

            conn.Open();

            using (IDbCommand dbcmd = conn.CreateCommand()){
                string sql = "Select client_username from dbo.client;";
                dbcmd.CommandText = sql;
                using (IDataReader reader = dbcmd.ExecuteReader()){
                    while( reader.Read() ){
                        string username = (string) reader["client_username"];
                    }
                }
            }
        }

注意区别 - 使用服务器,数据库。 一旦你的连接字符串正确,则可以使用尝试ConnectionStringBuilder,看看你得到完全相同的输出。 但其容易只是使用字符串,如果你有一个工程。



文章来源: can't connect to sql azure database using monotouch