用户代码未处理获取错误SqlException
本文关键字:取错误 SqlException 获取 未处理 代码 用户 | 更新日期: 2023-09-27 17:58:24
我正在为新用户注册创建一个注册表。我得到以下错误。我在谷歌上搜索解决方案,但没有一个帮助我
错误:建立与SQL Server的连接时,发生了与网络相关或特定于实例的错误。找不到或无法访问服务器。请验证实例名称是否正确,以及SQL Server是否已配置为允许远程连接。(提供程序:命名管道提供程序,错误: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();
}
}
您的连接字符串似乎偏离
Data Source=.';AttachDbFilename=|DataDirectory|'Database.mdf;Integrated Security=True;User Instance=True;
使用AttachDbFilename=...
元素表示您使用的是SQLServerExpress,但Express默认安装将使用SQLEXPRESS
实例名称,因此您的连接字符串应该是
Data Source=.'SQLEXPRESS;AttachDbFilename=|DataDirectory|'Database.mdf;Integrated Security=True;User Instance=True;
你试过使用这个连接字符串吗?运气好吗?
如果这不起作用,你能确定你安装了SQL Server的版本吗?在Management Studio中连接到它-您使用什么作为服务器名称??如果您已连接,SELECT @@Version
会返回什么?
使用从使用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);
创建一个属性,或者更好地创建一个存储过程
异常表明您的连接字符串是错误的。
您的连接字符串中不是缺少Initial Catalog=InstanceDB
吗?其中InstanceDB
是数据库的名称。
使用命令参数!如果你不这样做,你将面临几个问题:
- 您将受到SQL注入攻击的威胁
- 您将不得不处理空条目的特殊处理
- 您将不得不对字符串中的引号进行转义
- 您必须为日期值使用正确的格式
- 冗长的字符串串联看起来很难看
SqlCommand cmd = new SqlCommand(
"SELECT * FROM regform WHERE username = @usr", con);
cmd.AddWithValue("@usr", TextBox1.Text);
对insert语句执行相同操作。