2

我正在处理的当前程序是用于购物车的注册页面,我已经设置了一个带有表格的 SQL Server,以允许将数据记录为

  1. 用户名,
  2. 电子邮件,
  3. 密码都设置了一个Nvarchar(max)

.NET Framework 的版本是 4.5,我使用的是 VS 2012 并使用 C# 进行编码,服务器是KENSULLIVAN-PC\KSSQL使用集成 Windows 身份验证的 SQL Server 实例。

到目前为止,我已经能够将注册页面运行到它将保存信息的 cookie,但不会将任何信息发送到 SQL Server 中的表。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class Account_Register : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"];      
    }
    //Submit button for user registration information
    protected void RegisterUser_CreatedUser(object sender, EventArgs e)
    {
        int TheUserID = 5000;
        SqlConnection conn = new SqlConnection("Server=KENSULLIVAN-PC/KSSQL;Database=GroupProject; Integrated Security=True");

        //INSERT command for values to be updated or added to the Database
        SqlCommand comm = new SqlCommand("INSERT INTO RegUser (UserName, Email, Password) VALUES (@UserName, @Email, @Password)", conn);
        comm.Parameters.Add("@UserName", System.Data.SqlDbType.NVarChar, 100);
        comm.Parameters["@UserName"].Value = RegisterUser.UserName; 
        comm.Parameters.Add("@Email", System.Data.SqlDbType.NVarChar, 100);
        comm.Parameters["@Email"].Value = RegisterUser.Email;
        comm.Parameters.Add("@Password", System.Data.SqlDbType.NVarChar, 100);
        comm.Parameters["@Password"].Value = RegisterUser.Password;       

        try
        {
            conn.Open();
            comm.ExecuteNonQuery();
            Response.Redirect("~/LoggedIn.aspx");
        }
        catch
        {
           //ErrorDB.Text = "Error Submitting, Try Again";
        }
        finally
        {
            conn.Close();
        }

        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);
        string continueUrl = RegisterUser.ContinueDestinationPageUrl;

        if (String.IsNullOrEmpty(continueUrl))
        {
            continueUrl = "~/LoggedIn.aspx";
        }
        Response.Redirect(continueUrl);  
    }
}

我应该做些什么不同,你注意到什么不是真正推荐的?

谢谢你,肯尼斯

4

2 回答 2

2

我看到了几个可能的问题。

首先,SQL 数据库的实例名称应该使用反斜杠。当然,你需要避开那个反斜杠,所以试试这个:

SqlConnection conn = new SqlConnection("Server=KENSULLIVAN-PC\\KSSQL;Database=GroupProject; Integrated Security=True");

其次,ASP.NET 的集成安全性可能有点棘手,因为它通常是从服务或系统帐户运行的。您可能希望在 MS-SQL 中启用 MIXED 身份验证模式,创建 SQL 帐户,并传入用户名和密码。我建议将您的连接字符串存储在 web.config 中并对其进行加密。

您是否收到特定的错误/异常?这对我们很有帮助。

于 2013-04-03T00:58:30.713 回答
0

首先@Adam 已经指出,您的连接字符串有问题,对于 SQl 服务器的命名实例,如果您使用的是 .Net,它应该是反斜杠

SqlConnection conn = new SqlConnection("Server=KENSULLIVAN-PC\\KSSQL;Database=GroupProject; Integrated Security=True");
或使用@

SqlConnection conn = new SqlConnection(@"Server=KENSULLIVAN-PC\KSSQL;Database=GroupProject; Integrated Security=True");

其次,因为您使用的是 Window 身份验证,所以您需要设置 ThreadPool 托管您的 Web 应用程序以在 Windows 域帐户下运行,该帐户对后端数据库具有足够的权限。

如果每个使用您网站的用户都使用 windows 域帐户登录,并且您想使用用户的 windows 域凭据访问后端数据库,那么您需要进行更多设置,您需要模拟,您可能还需要约束委派。

于 2013-04-03T01:41:21.323 回答