私は、1 つのクライアントと 1 つのサーバーを持つプロジェクトに取り組んでいます。また、コードを配置するクラス ライブラリも作成し、このクラス ライブラリをサーバーとクライアントのリファレンスとして作成しました。そのため、クラスのオブジェクトを作成してクライアントからメソッドを呼び出します。そして、それは非常にうまく機能しています...今まで!
クラスライブラリには、ユーザー名が既に存在するかどうかを確認する Check() というメソッドがあります (登録しようとしたときなど)。しかし、問題は、データベースからのユーザー名を確認するステップがスキップされていることです!!理由がわからない、なぜエラーが表示されない. 発生する唯一のエラーは、スキップされたステップのために同じユーザー名をデータベースに挿入しようとしたときに表示されるエラーです.
クラス ライブラリ コードは次のとおりです。
bool busy = false;
bool empty = false;
bool notSame = false;
bool completed = false;
public void Check(string a1, string b2, string c3, string d4, string e5, string f6)
{
SqlConnection con = new SqlConnection(@"Data Source=TALY-PC;Initial Catalog=TicTacToe;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT * FROM tblUsers", con);
if (con.State.Equals(ConnectionState.Open))
{
return;
}
else
{
con.Open();
}
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr["Username"].ToString() == d4)
{
busy = true;
}
else if (a1 == "" || b2 == "" || c3 == "" || d4 == "" || e5 == "" || f6 == "")
{
empty = true;
}
else if (e5 != f6)
{
notSame = true;
return;
}
else
{
dr.Close();
SqlCommand cmd1 = new SqlCommand("INSERT INTO tblUsers (Name, LastName, email, Username, Password) VALUES ('" + a1 + "', '" + b2 + "', '" + c3 + "', '" + d4 + "', '" + e5 + "')", con);
cmd1.ExecuteNonQuery();
completed = true;
}
}
そして、スキップされた部分はこの部分です:
if (dr["Username"].ToString() == d4)
{
busy = true;
}
なぜこの部分をチェックしないのかわかりませんか??
クライアントからのコードは次のとおりです。
HttpChannel chan = new HttpChannel();
Tic obj = (Tic)Activator.GetObject(typeof(Tic), "http://127.0.0.1:9050/MyMathServer");
private void RegisterForm_Load(object sender, EventArgs e)
{
ChannelServices.RegisterChannel(chan);
}
private void Button1_Click(object sender, EventArgs e)
{
obj.Check(textBoxX1.Text, textBoxX2.Text, textBoxX3.Text, textBoxX4.Text, textBoxX5.Text, textBoxX6.Text);
label8.Text = obj.getUseri();
if (obj.getBusy() == true)
{
MessageBox.Show("This username is already Taken, please choose another username");
obj.setBusy();
}
else if (obj.getEmpty() == true)
{
MessageBox.Show("Please fill all the fields!");
obj.setEmpty();
}
else if (obj.getNotSame() == true)
{
MessageBox.Show("Passwords don't match!!");
textBoxX5.Text = "";
textBoxX6.Text = "";
obj.setNotSame();
}
else if (obj.getCompleted() == true)
{
MessageBox.Show("Registration was completed successfully. Please close the window and Log Int ");
textBoxX1.Text = "";
textBoxX2.Text = "";
textBoxX3.Text = "";
textBoxX4.Text = "";
textBoxX5.Text = "";
textBoxX6.Text = "";
obj.setCompleted();
}
}
ユーザー名をチェックしない理由を教えてください。