2016-10-19 47 views
0

這裏是我的代碼SqlDataReader對象沒有行發現

public string LeaderIdLookup(string leadername) 
     { 
     string step = null; 
     try 
      { 

      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandText = "select EmpId,Fullname from Employee where FullName like '@LeaderName'"; 
      cmd.Parameters.Add(new SqlParameter("LeaderName", SqlDbType.VarChar)); 
      cmd.Parameters["LeaderName"].Value = leadername.Trim(); 
      cmd.Connection = con; 
      SqlDataReader dr = cmd.ExecuteReader(); 
      dr.Read(); 

      step = "assigning the value from datareader to the variable lookup as a string (leaderidlookup) "; 
      if (dr.HasRows) 
       Lookup = dr[0].ToString(); 
      else 
       Lookup = "no rows found"; 

      dr.Close(); 
      return Lookup; 

      } 
     catch (SqlException ex) 
      { 
      Lasterror = string.Format("step {0} threw sql error {1}", step, ex.Message); 
      Debug.Print(Lasterror); 
      return string.Empty; 
      } 
     catch (Exception ex) 
      { 
      Lasterror = string.Format("step {0} threw error {1}", step, ex.Message); 
      Debug.Print(Lasterror); 
      return string.Empty; 
      } 

     } 

的問題是,SqlDataReader的不返回任何行 我有一種預感,它有,因爲當我在那裏硬編碼的名稱與參數替換做而不是使用它的作品完美的參數

我似乎無法弄清楚我會出錯的地方。

+0

圍繞參數的sql刪除引號並匹配參數的名稱:'新的SqlParameter(「@ LeaderName」,SqlDbType.VarChar));' – LarsTech

回答

-1

你的SqlConnection在哪裏?嘗試如下所示。 看到這裏的連接字符串的例子:https://msdn.microsoft.com/en-us/library/ms254500(v=vs.110).aspx#Anchor_2

您的連接字符串將是這樣的:「數據源=本地主機;初始目錄= MyDataBaseName;集成安全性=真」(假設你正在連接到本地主機和您的帳戶有特權在數據庫當然)

try 
    { 
     using (SqlConnection sqlConnection = new SqlConnection("put your connection string here")) 
     { 
      sqlConnection.Open(); 
      using (SqlCommand sqlCommand = new SqlCommand("select EmpId,Fullname from Employee where FullName like @LeaderName", sqlConnection)) 
      { 
       sqlCommand.CommandType = System.Data.CommandType.Text; 
       sqlCommand.Parameters.Add("@LeaderName", SqlDbType.VarChar).Value = leadername; 
       SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); 
       while (sqlDataReader.Read()) 
       { 
        //lots of options here, read it how you like... 
        string EmpID = sqlDataReader["EmpID"].ToString(); 
        string FullName = sqlDataReader["FullName"].ToString(); 
       } 
      } 
     } 
    } 
catch (Exception ex) { throw new System.ArgumentException(ex.Message); } 
+0

行不通的,因爲它表示一個參數替換 –

+0

我在再次查看您的代碼後編輯了我的答案。它看起來也許你沒有連接到服務器? – beeker

+0

我從來沒有在程序本身的sql連接字符串 –

1

您需要刪除查詢中變量名稱周圍的單引號。否則,你正在做一個文字比較FullName"@LeaderName" ......這是不可能存在的(你沒有得到行的原因)。您還需要提供帶有前導@的參數名稱。

cmd.CommandText = "select EmpId,Fullname from Employee where FullName like @LeaderName"; 
var leaderParameter = cmd.Parameters.Parameters.Add("@LeaderName", System.Data.SqlDbType.NVarChar); 
leaderParameter.Value = "%" + leaderName.Trim() + "%"; 
+0

嘗試不引用仍然沒有行,我知道該條目存在,因爲我使用了我在表中找到完全相同的值。 –

+0

「leaderName」變量中的值是什麼?它是否與至少一個「FullName」值匹配?如果你想使用部分搜索,你必須包含'%'作爲通配符。 (即'leaderName =「%Matt%」;') –

1

您需要刪除「LIKE'@LeaderName'」引號,並且必須指定帶有前導@的參數名稱。所以:

... new SqlParameter("@LeaderName", ...