我正在为新用户注册创建注册表单。我得到以下错误。我在谷歌搜索解决方案,但他们都没有帮助我。
错误:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (provider:Named Pipes Provider,错误:40 - 无法打开与SQL Server的连接)。
你可以帮我解决这个问题吗?
代码:
public partial class Registration : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True;");
con.Open();
SqlCommand cmd = new SqlCommand("Select * from regform where username='" + TextBox1.Text + "'", con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
Label1.Text = "User Name is Already Exist";
}
else
{
Label1.Text = "UserName is Available";
}
con.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True;");
con.Open();
String str = "Insert into regform values ( '" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "')";
SqlCommand cmd = new SqlCommand(str, con);
cmd.ExecuteNonQuery();
Session["name"] = TextBox1.Text;
Response.Redirect("Default.aspx");
con.Close();
}
}
答案 0 :(得分:1)
您的连接字符串似乎已关闭
Data Source=.\;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True;
使用AttachDbFilename=...
元素表示您正在使用SQL Server Express ,但Express默认安装将使用SQLEXPRESS
实例名称 - 因此您的连接字符串应该是
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True;
您是否尝试过此连接字符串?运气好吗?
如果这不起作用 - 您能确定已安装的SQL Server的版本吗?在Management Studio中连接它 - 你用什么作为服务器名称?如果你已经连接了 - SELECT @@Version
会返回什么?
答案 1 :(得分:0)
利用取自Retrieving Data Using a DataReader的示例 你会很快看到你在哪里犯了轻微的代码错误
static void HasRows(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
在此处更改您的代码
SqlCommand cmd = new SqlCommand("Select * from regform where username='" + TextBox1.Text + "'", con);
创建属性或更好的存储过程
答案 2 :(得分:0)
该异常表明您的连接字符串错误。
连接字符串中是否缺少Initial Catalog=InstanceDB
?其中InstanceDB
是数据库的名称。
使用命令参数!如果不这样做,您将面临几个问题:
SqlCommand cmd = new SqlCommand(
"SELECT * FROM regform WHERE username = @usr", con);
cmd.AddWithValue("@usr", TextBox1.Text);
对插入语句执行相同的操作。