我正在尝试使用Linq to SQL来访问我的sql server。我有一个用户表,其中包含uid,username&字段的密码。我为我的dbcontext创建了linq to sql class。
我可以使用login.aspx.cs中的登录界面连接到我的网站:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
bool authenticated = false;
TrackToolDataContext data = new TrackToolDataContext();
authenticated = IsValidUser(Login1.UserName, Login1.Password);
e.Authenticated = authenticated;
if (e.Authenticated == true)
{
Session["username"] = Login1.UserName;
Response.Redirect("Welcome.aspx");
}
}
private bool IsValidUser(string un, string pw)
{
TrackToolDataContext data = new TrackToolDataContext();
var userResults = from u in data.UserDetails
where u.username == un
&& u.password == pw
select u;
return Enumerable.Count(userResults) > 0;
}
但是当我尝试创建一个新用户屏幕时,我遇到了困难。 我在User类中创建了常规的用户名,密码字段,模仿我的表,在我的新用户页面中,我试图从User类中获取所有字段并尝试将其连接到sql,我收到此错误:{{0} }
以下是我创建新用户的代码:
protected void CreateUser_Click(object sender, EventArgs e)
{
// CreateUser(TextBox1.Text, TextBox2.Text);
User u = new User();
u.username = TextBox1.Text;
u.password = TextBox2.Text;
TrackToolDataContext data = new TrackToolDataContext();
data.UserDetails.InsertOnSubmit(u);
data.SubmitChanges();
}
答案 0 :(得分:2)
错误信息应该有第二部分,它应该告诉你到底出了什么问题。
如果您的登录屏幕有效,那么您的表是UserDetails而不是User,因此错误可能是“无法从User转换为UserDetail”,这表示您应该创建UserDetails的实例而不是User,例如< / p>
UserDetails u = new UserDetails();
u.username = TextBox1.Text;
u.password = TextBox2.Text;
TrackToolDataContext data = new TrackToolDataContext();
data.UserDetails.InsertOnSubmit(u);
data.SubmitChanges();
答案 1 :(得分:1)
你有这条线:
data.UserDetails.InsertOnSubmit(u);
但u
被声明为User
,而不是UserDetail
,因此您将其添加到错误的表格中。尝试:
data.Users.InsertOnSubmit(u);
话虽这么说,我希望这是一个测试应用程序,因为你不应该像其他人所说的那样以明文(或根本)存储密码。
答案 2 :(得分:0)
在@Kirk指出我在L2S中的一个重要注释后,我能够解决这个问题,所以指向他:
这段代码工作并保存到我的sql。
UserDetail u = new UserDetail();
u.username = TextBox1.Text;
u.password = TextBox2.Text;
TrackToolDataContext data = new TrackToolDataContext();
data.UserDetails.InsertOnSubmit(u);
data.SubmitChanges();
答案 3 :(得分:-1)
data.UserDetails.Add(u);
data.SaveChanges();