如何在Microsoft Azure中的数据库中存储数据

时间:2016-09-24 12:57:26

标签: c# asp.net sql-server azure

当我将数据存储在Microsoft Azure Cloud中时,我遇到了这个问题。

此处错误日志:

  '/'应用程序中的服务器错误。网络相关或   建立连接时发生特定于实例的错误   SQL Server。服务器未找到或无法访问。校验   实例名称正确且SQL Server配置为   允许远程连接。 (提供者:SQL网络接口,错误:26    - 查找指定的服务器/实例时出错)描述:执行当前Web请求期间发生未处理的异常。   请查看堆栈跟踪以获取有关错误的更多信息   它起源于代码。

     

异常详细信息:System.Data.SqlClient.SqlException:A   建立时发生与网络相关或特定于实例的错误   与SQL Server的连接。服务器未找到或未找到   无障碍。验证实例名称是否正确以及SQL   服务器配置为允许远程连接。 (提供者:SQL   网络接口,错误:26 - 查找服务器/实例时出错   指定)

这是我的代码:

protected void Button1_Click(object sender, EventArgs e)
{
    int userId = 0;

    SqlConnection con = new SqlConnection("Data Source=asimo.database.windows.net;Initial Catalog=asimo;Persist Security Info=True;User ID=veeraiyan;Password=***********");
    con.Open();
    SqlCommand cmd = new SqlCommand("insert into registration(username,password,email)values('" + txtusername.Text + "','" + txtpassword.Text + "','" + txtemail.Text + "')", con);
    cmd.Parameters.AddWithValue("@username", txtusername.Text.Trim());
    cmd.Parameters.AddWithValue("@password", txtpassword.Text.Trim());
    cmd.Parameters.AddWithValue("@email", txtemail.Text.Trim());
    userId = cmd.ExecuteNonQuery();
    con.Close();

    string message = string.Empty;
    switch (userId)
    {
        case -1:
            message = "Username already exists.\\nPlease choose a different username.";
            break;
        case -2:
            message = "Supplied email address has already been used.";
            break;
        default:
            message = "Registration successful.\\nUser Id: " + userId.ToString();
            break;
    }
    ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);
}

2 个答案:

答案 0 :(得分:0)

查看https://www.google.com/search?q=agoogle&ie=&oe=#q=agoogle+c-sharp+azure+sql+connection+string您的连接字符串问题。然后,如评论中所建议,更改:

  SqlCommand cmd = new SqlCommand("insert into registration(username,password,email)values('" + txtusername.Text + "','" + txtpassword.Text + "','" + txtemail.Text + "')", con);

 //change your connection string to an Azure-compatible one... 

为:

  SqlCommand cmd = new SqlCommand("insert into registration(username,password,email)values(@username,@password,@email, con);

当你进入它时,改变:

 SqlConnection con = new SqlConnection("Data Source=asimo.database.windows.net;Initial Catalog=asimo;Persist Security Info=True;User ID=veeraiyan;Password=***********");

为:

using(SqlConnection con = new SqlConnection("Data Source=asimo.database.windows.net;Initial Catalog=asimo;Persist Security Info=True;User ID=veeraiyan;Password=***********")){

 //....

 }

答案 1 :(得分:0)

Azure Sql Server数据库的连接字符串应写为

string cnString = @"Data Source=tcp:asimo.database.windows.net,1433;
                   Database=asimo;Trusted_Connection=False;
                   User ID=veeraiyan@asimo;Password=***********;
                   Encrypt=True;";

表示,您插入记录和检索IDENTITY列UserID的代码未进行参数化。

正确的方法如下

string cmdText = @"insert into registration
                   (username,password,email)
                   values(@username, @password, @email);
                   SELECT SCOPE_IDENTITY()";
using(SqlConnection con = new SqlConnection(cnString))
using(SqlCommand cmd = new SqlCommand(cmdText, con))
{
    con.Open();
    cmd.Parameters.AddWithValue("@username", txtusername.Text.Trim());
    cmd.Parameters.AddWithValue("@password", txtpassword.Text.Trim());
    cmd.Parameters.AddWithValue("@email", txtemail.Text.Trim());
    userId = Convert.ToInt32(cmd.ExecuteScalar());
    ...

请注意,要检索UserID,您将无法获得ExecuteNonQuery的返回值。此方法仅返回命令插入的行数。相反,您可以将两个命令放在一起,第一个插入记录,第二个返回连接生成的最后一个IDENTITY的值。使用的方法是ExecuteScalar,它返回第一行的第一列(来自最后一个SELECT语句)。