[英]How To store data in Sql database in Microsoft Azure
当我将数据存储在Microsoft Azure云中时,我会遇到此问题。
这里的错误日志:
“ /”应用程序中的服务器错误。 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:SQL网络接口,错误:26-错误指定服务器/实例的位置)说明:在执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者: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);
}
查看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=***********")){
//....
}
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语句返回)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.