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

时间:2014-04-15 19:52:34

标签: c# sql-server-2008

我正在为新用户注册创建注册表单。我得到以下错误。我在谷歌搜索解决方案,但他们都没有帮助我。

  

错误:建立与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();
    }
}

3 个答案:

答案 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是数据库的名称。


使用命令参数!如果不这样做,您将面临几个问题:

  • 您将受到SQL注入攻击的威胁!
  • 您必须处理空条目的特殊处理。
  • 您必须以字符串形式转义引号。
  • 您必须使用正确的日期值格式。
  • 冗长的字符串连接看起来很难看。
SqlCommand cmd = new SqlCommand(
    "SELECT * FROM regform WHERE username = @usr", con);
cmd.AddWithValue("@usr", TextBox1.Text);

对插入语句执行相同的操作。