-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;

        }

しかし、新しいユーザー画面を作成しようとすると、うまくいきません。テーブルを模倣するユーザー クラスに通常のユーザー名、パスワード フィールドを作成し、新しいユーザー ページで、ユーザー クラスからすべてのフィールドを取得しようとし、それを 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

エラー メッセージには、何が間違っているかを正確に伝える 2 番目の部分があるはずです。

ログイン画面が機能する場合、テーブルは UserDetails であり User ではないため、エラーはおそらく「ユーザーから UserDetail に変換できません」と表示されます。これは、User ではなく UserDetails のインスタンスを作成する必要があることを示しています。

    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として宣言されているため、間違ったテーブルに追加しています。試す:UserUserDetail

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 に答える