我正在使用VS2k10编写一个需要用户名和密码才能运行的C#程序。我有一个数据库保存在外部文件中,其中包含用户名和密码。当我在登录表单中单击“注册”时,将打开另一个表单,允许您将凭据保存到登录数据库。
问题可能在于注册表,而不是登录表。当我成功注册用户帐户时,登录表单似乎无法识别该用户名。它也不保存到文件中。检查了SE如何提交对数据集的更改,但到目前为止没有任何工作。
我目前的代码是:
DataRow foundRow = ds.Tables["userstable"].Rows.Find(username.Text);
if (foundRow != null)
{ MessageBox.Show("Username already exists!"); }
else
{
DataRow newrow = ds.Tables["userstable"].NewRow();
newrow["ID"] = username.Text;
newrow["hash"] = CalculateMD5Hash(password.Text + username.Text + "hambába");
ds.Tables["userstable"].Rows.Add(newrow);
username.Text = "";
password.Text = "";
repeatpass.Text = "";
ds.AcceptChanges();
MessageBox.Show("Registration complete!");
}
“ds”是使用的数据集。 该表有两列 - “ID”和“hash”,它们包含用户名和从密码计算的哈希值。有什么问题,我错过了什么吗?
答案 0 :(得分:1)
ds.AcceptChanges();
不更新,但请签名忽略更改。要进行更新,您需要使用DataAdapter命令进行更新,并使用Update()
方法:
DataAdapter.Update(ds);
答案 1 :(得分:1)
您用于填充DataSet的DataAdapter在哪里?你需要做这样的事情。
clear
clc
close all
%// Read and clean up sample image
A = imread('rice.png');
A = im2bw(A,.5);
A = bwareaopen(A,50);
CC = bwconncomp(A);
%// Same as you.
data = regionprops(CC,'all');
%// Concatenate all the areas into an array.
AllArea = vertcat(data.Area);
%//========================================
%//==== Apply threshold on area here \\====
AboveAreaIndices = find(AllArea > 150);
%// If you wish to remove the entries from the data structure
% data(AllArea>150) = [];
%//========================================
%// Same for centroids...for display purposes
AllCentroids = vertcat(data.Centroid);
%// Display original and thresholded objects. Use the indices calculated
%// above to "mask" large areas if you want
imshow(A);
hold on
scatter(AllCentroids(:,1),AllCentroids(:,2),40,'b','filled')
scatter(AllCentroids(AboveAreaIndices,1),AllCentroids(AboveAreaIndices,2),40,'r','filled')
有关详细信息,请参阅此链接https://msdn.microsoft.com/en-us/library/xzb1zw3x.aspx
我还建议您从影响UI的代码中分离出写入数据库的代码。在这里查看MVC(模型视图控制器)模式是什么。 http://blog.codinghorror.com/understanding-model-view-controller/并在此处查看有关ASP.NET MVC http://www.w3schools.com/aspnet/mvc_app.asp
的初学者教程答案 2 :(得分:0)
我不知道你的设置,但是ds.AcceptChanges();不要将更改写入底层数据库。如果你设置它就像你必须显示你的代码,但单独的AcceptChanges是不够的。 MSDN:在DataSet上调用AcceptChanges时,任何仍处于编辑模式的DataRow对象都会成功结束编辑。每个DataRow的RowState属性也会发生变化;添加和修改的行变为未更改,删除的行将被删除。