使用LINQ将新用户添加到sql

时间:2013-03-19 18:09:48

标签: c# asp.net linq linq-to-sql

我正在尝试使用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();
    }

4 个答案:

答案 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();