我正在处理的当前程序是针对购物车的注册页面,我已经设置了一个带有表格的SQL Server,以便将数据记录为
Nvarchar(max)
。 .NET Framework的版本是4.5,我正在使用VS 2012并使用C#编码,服务器是使用集成Windows身份验证的SQL Server实例KENSULLIVAN-PC\KSSQL
。
到目前为止,我已经能够运行注册页面,以便保存信息的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);
}
}
我应该采取哪些不同的做法,您注意到哪些不是真正推荐的?
谢谢你, 肯尼斯
答案 0 :(得分:2)
我看到了几个可能的问题。
首先,SQL数据库的实例名称应该使用反斜杠。当然你需要逃避反斜杠,所以试试这个:
SqlConnection conn = new SqlConnection("Server=KENSULLIVAN-PC\\KSSQL;Database=GroupProject; Integrated Security=True");
其次,集成安全性在ASP.NET中可能有点棘手,因为它经常从服务或系统帐户运行。您可能希望在MS-SQL中启用MIXED身份验证模式,创建SQL帐户,并传入用户名和密码。我建议将连接字符串存储在web.config中并加密。
您收到的是否有特定的错误/异常?这对我们非常有帮助。
答案 1 :(得分: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");
其次,因为您正在使用窗口身份验证,所以您需要设置ThreadPool,托管您的Web应用程序以在Windows域帐户下运行,该帐户具有足够的后端数据库权限。
如果每个使用您网站的用户使用Windows域帐户登录,并且您希望使用用户的窗口域凭据来访问后端数据库,那么您需要更多设置,需要模拟,您可能还需要约束委派。