将字符串传递给类

时间:2014-11-01 07:30:59

标签: c# string class sqldatareader

我的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()以使其实际上在数据库中查找。而不是直接将字符串复制到列表中。

这是班级:

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()。Trim());部分(工作正常)

使用传递给方法的字符串。

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);
            }

2 个答案:

答案 0 :(得分:1)

我并不是100%肯定你正在尝试做什么,但我现在可以告诉你,这就是你做错了什么 - 字符串(str)你&#39;重新传递给ReaderRdr只是C#代码的字符串文字。你可以用eval()来模仿其他语言中存在的超级hacky(超级不可取)的东西,但是在C#中没有内置的方法可以做到这一点。你没做什么(明智的)&#34;(rdr.GetString(1).ToString()。Trim())&#34;将要获得一个字符串,或将其转换为字符串,或修剪任何东西。

在您的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
}

我不确定您是否可以根据SqlDataReader的状态建立numberOfColumns,但其他人可能会更清楚。

答案 1 :(得分:0)

您实际上将传递给函数的String添加到阅读器中reader.Add(str);您可以从SQL rdr获得响应。

此项目将向您显示数据库中的内容:

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