2014-11-01 139 views
-1

我有一個問題,我的SQL datareader,我想做一個外部類,並使我的代碼xaml.cs儘可能短,因爲在我的程序中需要很多sqldatareaders。爲了這個,我想通過以下兩個字符串到datareader類:傳遞一個字符串到類

public void refreshcombobox() 
{ 
    cbGebruiker.Items.Clear(); 
    database = new DataBase(); 
    string sqlrdr = "(rdr.GetString(1).ToString().Trim())"; 
    List<string> reader = database.ReaderRdr("Select * from Gebruikers", ref sqlrdr); 
     foreach (String str in reader) 
     { 
      cbGebruiker.Items.Add(str); 
     } 
} 
然而

,當我這樣做是這樣的結果在我的程序,而不是存儲在該database實際效果:

http://i58.tinypic.com/301j2vo.jpg(我不能發佈圖片)

有人可以幫助我嗎?我到處搜索過...... 我不知道如何通過rdr.GetString(1).ToString().Trim(),以使它在db中看起來真實。而不是直接將字符串複製到列表中。

這是類:

namespace ClassLib 
    { 
public class DataBase 
    { 
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["kassadatabase"].ConnectionString); 
    public object ScalarObject(string sql) 
    { 
     object value = null; 
     try 
     { 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      value = cmd.ExecuteScalar(); 

     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (conn != null) conn.Close(); 
     } 
     return value; 
    } 
    public List<string> ReaderRdr(string sql) 
    { 
      SqlDataReader rdr = null; 
      List<string> reader = new List<string>(); 
      try 
      { 
       conn.Open(); 
       SqlCommand cmd = new SqlCommand(sql, conn); 
       rdr = cmd.ExecuteReader(); 
       while (rdr.Read()) 
       { 
        //reader.Add(rdr.GetString(1).ToString().Trim()); 
       } 
      } 
      catch (SqlException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       if (rdr != null) rdr.Close(); 
       if (conn != null) conn.Close(); 
      } 
      return reader; 
    } 
    //public List<string> ReaderRdr(string sql, ref string str) 
    //{ 
    // SqlDataReader rdr = null; 
    // List<string> reader = new List<string>(); 
    // try 
    // { 
    //  conn.Open(); 
    //  SqlCommand cmd = new SqlCommand(sql, conn); 
    //  rdr = cmd.ExecuteReader(); 
    //  while (rdr.Read()) 
    //  { 
    //   //MessageBox.Show(str.ToString()); 
    //   //var strRdr = str; 
    //   //MessageBox.Show(strRdr.ToString()); 
    //   //reader.Add(rdr.GetString(1).ToString().Trim()); 
    //   reader.Add(str); 
    //   Console.WriteLine(String.Format("{0}", rdr[0])); 
    //  } 
    // } 
    // catch (SqlException ex) 
    // { 
    //  MessageBox.Show(ex.Message); 
    // } 
    // finally 
    // { 
    //  if (rdr != null) rdr.Close(); 
    //  if (conn != null) conn.Close(); 
    // } 
    // return reader; 
    //} 
    public void ExecuteNQuery(string insertString) 
    { 
     try 
     { 
      conn.Open(); 
      SqlCommand cmd2 = new SqlCommand(insertString, conn); 
      cmd2.ExecuteNonQuery(); 
     } 
     catch (SqlException ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (conn != null) conn.Close(); 
     } 
    } 
} 

}

public List<string> ReaderRdr(string sql) 
{ 
     SqlDataReader rdr = null; 
     List<string> reader = new List<string>(); 
     try 
     { 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       //reader.Add(rdr.GetString(1).ToString().Trim()); 
      } 

.....

在梅索德公示名單現在

我想更換//reader.Add( rdr.GetString(1)的ToString()修剪())。部分(極好地工作)

用傳遞給方法的字符串。

public List<string> ReaderRdr(string sql, string strRdr) 
{ 
     SqlDataReader rdr = null; 
     List<string> reader = new List<string>(); 
     try 
     { 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       //reader.Add(strRdr); 
      } 
+0

你居然還說你傳遞給函數到你的讀者'reader.Add(STR)的字符串;'你得到的響應SQL我是你的'rdr'。 – Andrew 2014-11-01 07:41:47

+0

是的,我知道,但我不知道如何正確地做到這一點。 – maxim 2014-11-01 07:43:54

回答

1

我不是100%肯定,你想要做什麼,但我可以告訴你,現在,這是你在做什麼錯 - 字符串(STR)你傳遞給ReaderRdr只是C#代碼的字符串文字。你可以做很多事情來模仿其他語言中存在的eval(),但是在C#中沒有內建的方法。 「(rdr.GetString(1).ToString()。Trim())」會得到一個字符串,或者將其轉換爲字符串或修剪任何東西。

在您的ReaderRdr函數中,您所要完成的只是將string str添加到List<string> reader。這不會產生任何結果,也不會影響您在SqlDataReader rdr中從數據庫查詢中獲得的結果。如果你想存儲你真正從數據庫中獲取的數據,使用rdr,而不是(沒用)字符串參數str.

另外,我覺得你一定是遺漏了某些東西的代碼 - 你實例化你的SqlCommand cmdconn作爲第二個參數,但我沒有看到在您的ReaderRdr方法中的任何地方定義,並且它不是傳遞給ReaderRdr的參數。你的類中沒有SqlConnection對象作爲字段或屬性,對嗎?

至於你也許應該這樣做,儘管缺乏太多的任何方面的實際目標而言 - 如果你想要得到的結果,任何給定列由您SqlDataReader返回的每一行:

rdr = cmd.ExecuteReader(); 
while (rdr.Read()) 
{ 
    var yourDataCell = rdr[yourColumnIndex]; 
    // or: 
    var yourDataCellOtherWay = rdr["YourColumnName"]; 
} 

或者,你可以通過每個單元由您SqlDataReader像這樣產生的任何給定行中循環:

for(int i = 0 ; i < numberOfColumns; i++) { 
    // do something with rdr[i] here 
} 

我不知道是否有什麼可以做,基於狀態建立numberOfColumns您SqlDat aReader,但其他人可能會更清楚。

+0

我想讓我的程序中的每個sqldatareader都可以使用一個類(我需要使用這個代碼,比如20次) 所有的代碼都需要從我的數據庫獲取數據列表並將它傳遞給組合框和列表框。 – maxim 2014-11-01 07:48:55

+0

@maxim我已經包含了正確的語法來獲取由SqlDataReader返回的行中的任何給定的單元格。 – furkle 2014-11-01 07:53:41

0

實際上,您將傳遞給某個函數的字符串添加到您的閱讀器reader.Add(str);您從SQL I rdr獲得響應。

此產品將顯示你的東西從你的數據庫:

Console.WriteLine(String.Format("{0}", rdr[0]));

相關問題