-1

我正在尝试使用 Linq to SQL 访问我的 sql 服务器。我有一个用户表,其中包含字段的 uid、用户名和密码。我为我的 dbcontext 创建了 linq to sql 类。

我可以使用 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 类中获取所有字段并尝试将其 linq 到 sql,我收到此错误:在此处输入图像描述

这是我创建新用户的代码:

 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();
    }
4

4 回答 4

2

错误消息应该有第二部分,它应该确切地告诉您出了什么问题。

如果您的登录屏幕正常工作,那么您的表是 UserDetails 而不是 User,因此错误可能是“无法从 User 转换为 UserDetail”,这表明您应该创建 UserDetails 的实例而不是 User,例如

    UserDetails u = new UserDetails();
    u.username = TextBox1.Text;
    u.password = TextBox2.Text;

    TrackToolDataContext data = new TrackToolDataContext();
    data.UserDetails.InsertOnSubmit(u);
    data.SubmitChanges();
于 2013-03-19T18:58:32.717 回答
1

你有这行:

data.UserDetails.InsertOnSubmit(u);

但是u被声明为 a User,而不是 a UserDetail,因此您将其添加到错误的表中。尝试:

data.Users.InsertOnSubmit(u);

话虽如此,我希望这是一个测试应用程序,因为您不应该像其他人所说的那样以明文(或根本)存储密码。

于 2013-03-19T18:21:28.340 回答
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();
于 2013-03-19T19:03:25.300 回答
-1
data.UserDetails.Add(u);
data.SaveChanges();
于 2013-03-19T18:17:16.447 回答