【发布时间】:2016-08-05 00:15:20
【问题描述】:
我正在创建一个涉及用户注册的小型 wpf 项目。在这个项目中,我使用 dataAdapter 将数据从数据库加载到数据表中。
con = new SqlConnection(connectionString);
string query = "select * from Users;";
cmd = new SqlCommand(query, con);
da = new SqlDataAdapter();
da.SelectCommand = cmd;
users = new DataTable();
con.Open();
da.Fill(users);
数据库有 6 列 ID,即自动递增、用户名、密码、名称和两个 int 类型列,默认值为零。这是数据库架构。
CREATE TABLE [dbo].[Users] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[username] NVARCHAR (20) NOT NULL,
[password] NVARCHAR (20) NOT NULL,
[name] NVARCHAR (50) NULL,
[attempted] INT DEFAULT ((0)) NULL,
[correct] INT DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
UNIQUE NONCLUSTERED ([username] ASC)
);
每当我将新用户插入数据表时,我只提供用户名、密码和名称,其余字段应自动填写,但数据表仅保存提供的字段,其余字段留空,当我调用时
da.update(users);
它会更新数据库中的数据并自动填充剩余字段,但数据表仍将这些字段包含为空列。
但我需要用户 ID 来更新或删除用户。问题是如何将数据表与数据库同步以获取更新的字段,以便我可以将它们用于进一步的操作。提前感谢您的帮助。
更新: 下面给出了插入查询和参数
query = "insert into Users (username, password, name)values(@u, @p, @n)";
SqlCommand insertcmd = new SqlCommand(query, con);
insertcmd.Parameters.Add(new SqlParameter("u", SqlDbType.NVarChar, 20, "username"));
insertcmd.Parameters.Add(new SqlParameter("p", SqlDbType.NVarChar, 20, "Password"));
insertcmd.Parameters.Add(new SqlParameter("n", SqlDbType.NVarChar, 50, "name"));
da.InsertCommand = insertcmd;
【问题讨论】:
-
警告 - 您在数据库中以明文形式存储密码。这不是一个好习惯。密码应该是一种散列和加盐的方式。遵循良好的安全实践非常重要。
-
感谢您的建议。但这个项目只是练习的家庭作业。所以目前没有安全问题。
-
问题中没有任何内容与 WPF 相关。删除了不相关的标签。