2014-11-01 107 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]));

相关问题