如何在ASP.NET中解决此错误

时间:2016-05-27 21:20:20

标签: c# asp.net sql-server

我是asp.net和sql server的初学者。我在sql server 2014中使用sql身份验证创建了一个数据库。

这是我的代码:

Registration.aspx.cs

public partial class Registration : System.Web.UI.Page
{
     SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-U9DUN78\SQLEXPRESS;Initial Catalog=LoginRegisterData;Persist Security Info=True;User ID=sa;Password=***********;Pooling=False");
     protected void Page_Load(object sender, EventArgs e)
     {

     }


     protected void Button1_Click(object sender, EventArgs e)
     {      
        try
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into UserDetails values('" + TextBoxUsername.Text + "','" + TextBoxEmailid.Text+ "','" + TextBoxPassword.Text + "','" + TextBoxDate.Text + "','" + DropDownListCountry.SelectedItem + "')";
            cmd.ExecuteNonQuery();
            con.Close();
       }
       catch(Exception ee)
       {
            Response.Write(ee);
       }

  }

我想将数据存储到sql server数据库中。以下快照是我得到的错误:

Error page

2 个答案:

答案 0 :(得分:1)

正如其他人所说,它可能只是一个错误的密码。 要确保在SSMS中启用了Sql Server身份验证,请右键单击该实例,选择属性并确保选中Sql Server和Windows身份验证。

enter image description here 也...

  1. 要创建和测试连接字符串,您可以创建一个新的文本文件并将其重命名为anything.udl。 如果双击它,您将能够为几种不同的连接类型创建和测试连接字符串。如果保存更改,然后在记事本中打开文件,您将看到所需格式的连接字符串。

  2. 您不应该使用sa连接到您的数据库,就好像您有一个SQL注入漏洞(就像您一样),如果您只有普通用户,可能造成的损害要大得多。

  3. 在您做其他任何事情之前,请阅读sql injection,因为您编写的代码是教科书示例。

答案 1 :(得分:1)

在Sql Server 2008 R2上测试。正如@etoisarobot所说,如上配置服务器以接受SQL和Windows身份验证。然后,管理员(希望是您)的某个人使用Windows身份验证进行连接。运行此脚本以更改sa密码 - 这样您就知道自己拥有正确的密码。运行此脚本:

ALTER LOGIN [sa] WITH PASSWORD='PickAPassword', CHECK_POLICY=OFF
GO
ALTER LOGIN [sa] ENABLE
GO

重新启动“Sql Server”服务以使更改生效。 然后,您应该能够以sa登录。

正如其他人所说,你应该创建一个除sa以外的新登录帐户,只需要他们需要的权限,例如datareader和datawriter。您不希望授予用户更改表结构等的权限。

更安全的是仅提供datareader权限并授予对存储过程的执行权限。此链接显示了如何:GRANT EXECUTE to all stored procedures

您放弃使用UPDATE,INSERT,DELETE语句的能力,并且编写存储过程以执行这些更新还有一些工作要做。但您可以控制数据的更新方式。您不希望用户在预期DELETE MyPreciousTable时执行DELETE MyPreciousTable WHERE id = 123456789

您可以使用GRANTDENY命令作为管理员来微调外部用户可以执行的操作。