0


従業員のスキルを検索するための基本的な検索ページがあります。

dbo.Emp と dbo.Skill テーブルの間に「Dbo.Emp_skill_Bridge」というブリッジ テーブルがあります。

これは、ブリッジテーブルのみを検索できるようにするためにこれまで行ってきたことです。

例: このテーブルからのみ従業員の詳細を取得するには、「2」と入力する必要があります。「java」のように入力する Skill があり、Emp テーブルから従業員のリストを取得します。

dbo.Emp_Skill_Bridge
SkillID (FK) | EmpID (FK)

dbo.Skills
SkillName | SkillID(PK)

dbo.Emp
EmpID (PK) | Fname| LName | .....

したがって、Skills からスキルを検索し、正確な従業員の詳細を取得する必要があります。
更新しました:

protected void Button1_Click(object sender, EventArgs e)
        {

            String var2 = System.Configuration.ConfigurationManager.ConnectionStrings["KKSTechConnectionString"].ConnectionString;
            SqlConnection con = new SqlConnection(var2);

            //SqlCommand cmd = new SqlCommand("select * from Emp_Skill_Bridge where SkillID like '%" + TextBox1.Text + "%' ", con);
            SqlCommand cmd = new SqlCommand("SELECT * FROM Emp_Skill_Bridge ESB INNER JOIN Emp E ON E.EmpId = ESB.EmpId INNER JOIN Skills S ON S.SkillID = ESB.SkillID WHERE ESB.SkillID LIKE '%" + TextBox1.Text + "%' OR ESB.SkillID LIKE '%" + TextBox1.Text + "%'", con);


            //string val = TextBox1.Text.ToString();

            con.Open();

            cmd.ExecuteNonQuery();
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();
            da.Fill(ds, "Emp");
            GridView1.DataSourceID = null;
            GridView1.DataSource = ds;
            GridView1.DataBind();
            con.Close(); 
        }

コードは機能していますが、GridView にはデータが表示されません。

4

3 に答える 3

0

質問をきちんと理解していれば

 //From this query you will get the skill ID
select * from Emp_Skill_Bridge where SkillID like '% + TextBox1.Text +"%' "
//save the result of this query in a variable and pass it to the below query. Example I save the skill iD in a variable myskillid.

//To get the employee you have to pass teh skillID in the employee table, you have to write   another query
select * from Emp where skillID = myskillId

 //It is better to write a store procedure and use them in your code
 Create procedure getskill 
 @skill bigint -- change it to your column's type
 AS
    Declare @skillid bigint -- change it to your column's type
    set @skillid = ( select * from Emp_Skill_Bridge where SkillID like '%' + skillid +'%'  );
    select * from Emp where skillID = @skillid

  // and in your code you have to make the following changes
   SqlCommand cmd = new SqlCommand();
   cmd.CommandText = getskill; // procedure name
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Connection = con; // give the connection object
        con.Open(); // open the connection

        cmd.ExecuteNonQuery();
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
于 2012-08-13T06:27:17.410 に答える
0

Int.Parse Method があり、提供された文字列を int に解析できる場合はtrueを返し、解析できない場合はfalseを返します。

そのため、 SkillID列に基づいて数値を検索する場合、または列SkillNameに基づいて文字列を検索する場合、テキストボックスに入力する値が文字列か数値かを確認する必要がある場合。

string strcommand = string.Empty;
int num;
bool result = int.TryParse(txtboxsearch.Text, out num);
if (result == true)
{
strcommand = "SELECT * FROM Emp_Skill_Bridge ESB INNER JOIN  Emp E ON "+
          "E.EmpId = ESB.EmpId INNER JOIN  Skills S ON " +
          "S.SkillID = ESB.SkillID WHERE ESB.SkillID = " + TextBox1.Text ;
}
else
{
    strcommand = "SELECT * FROM Emp_Skill_Bridge ESB INNER JOIN  Emp E " + 
                 "ON E.EmpId = ESB.EmpId INNER JOIN  Skills S ON " +
                 "S.SkillID = ESB.SkillID WHERE ESB.SkillName  like '%" + TextBox1.Text + "%'" ;

}

SqlCommand cmd = new SqlCommand(strcommand ,con);
于 2012-08-13T08:27:51.110 に答える
0

正しく理解している場合は、2 つのテーブルを結合して、ユーザー入力を WHERE 条件のスキル列と ID 列と比較する OR キーワードを持つクエリを作成できます。

SELECT * FROM Emp_skill_Bridge ESB
INNER JOIN Emp E
ON E.Id = ESB.Id
INNER JOIN Skill S
ON S.Id = ESB.SkillId
WHERE SkillID LIKE '% + TextBox1.Text + %' 
OR SkillID LIKE '% + TextBox1.Text + %'

私はデータベース構造を持たずに即興で演奏しようとしましたが、上記の作業のようなものはうまくいくはずです。私はそれをテストしていないので、少し調整する必要があるかもしれません。

于 2012-08-13T06:18:36.267 に答える