用户代码未处理获取错误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();
    }
}

用户代码未处理获取错误SqlException

您的连接字符串似乎偏离

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语句执行相同操作。