2017-01-15 5 views
2

以下は、EmployeeNumberDOBがSQL Serverデータベースに存在していますが、ボタンを押した後に出力されます。SQL Server ExpressへのC#リンクの出力が間違っています

私は何度も試してみましたが、間違った出力を引き起こす問題を理解できませんでした。

Output from C#

ご協力いただきありがとうございます!

C#コード:

private void btn_Click(object sender, EventArgs e) 
{ 
    string constring = ConfigurationManager.ConnectionStrings["FirstConnection"].ConnectionString; 

    SqlConnection con = new SqlConnection(constring); 

    SqlCommand cmd = new SqlCommand("spEmployeeC", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    cmd.Parameters.AddWithValue("@Employee", txtEmployee.Text); 
    cmd.Parameters.AddWithValue("@DOB", txtPassword.Text); 

    //cmd.IsValid 

    con.Open(); 

    cmd.ExecuteNonQuery(); 

    if (txtEmployee.Text == "@Employee" && txtPassword.Text == "@DOB") 
    { 
     MessageBox.Show("Welcome " + txtEmployee.Text); 
    } 
    else 
    { 
     MessageBox.Show("The Username or Password you entered is incorrect. Please try again"); 
    } 
} 

SQL Serverのストアドプロシージャのコード:

CREATE PROCEDURE spEmployeeC 
    @Employee INT, 
    @DOB DATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @Employee_check INT; 
    DECLARE @Password_check DATE; 

    SELECT * 
    FROM Employee_Table 
    WHERE [EMPLOYEE_NUM] = @Employee AND [DOB] = @DOB 
END 
+0

まずは:http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ – DavidG

+0

2番目:結果は何もしないストアドプロシージャの実行ユーザー名のテキストボックスに「@Employee」というテキストが含まれているかどうかをチェックするだけです。 – DavidG

+0

@DavidGこんにちはDavid!共有していただきありがとうございます。私のコードを改善する良い方法はありますか? :) – FredaC

答えて

0

はこのような何かが良いだろう。

protected void btn_Click(object sender, EventArgs e) 
    { 
     if (string.IsNullOrEmpty(txtEmployee.Text)) 
     { 
      MessageBox.Show("You must supply an Employee Number"); 
      return; 
     } 

     if (string.IsNullOrEmpty(txtPassword.Text)) 
     { 
      MessageBox.Show("You must supply a Password"); 
      return; 
     } 

     if (IsAuthenticated()) 
     { 
      MessageBox.Show("Welcome " + txtEmployee.Text); 
     } 
     else 
     { 
      MessageBox.Show("The Username or Password you entered is incorrect. Please try again"); 
     }; 
    } 

    private bool IsAuthenticated() 
    { 
     using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand("spValidateCredentials", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@Employee", SqlDbType.Int).Value = txtEmployee.Text; 
      cmd.Parameters.Add("@DOB", SqlDbType.Date).Value = DateTime.Parse(txtPassword.Text); 
      conn.Open(); 
      return ((int)cmd.ExecuteScalar() > 0); 
     } 
    } 

も多分返すためにストアドプロシージャを変更レコード数:

CREATE PROCEDURE [dbo].[spValidateCredentials] 
    @Employee INT, 
    @DOB DATE 
AS 
BEGIN 
    SELECT COUNT(*) 
     FROM Employee_Table 
    WHERE [email protected] 
     AND [email protected] 
END 
関連する問題