将字符串传递给类
本文关键字:字符串 | 更新日期: 2023-09-27 18:28:37
我的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());
}
现在在methode公共列表中,我想替换//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);
}
我不能100%确定你想做什么,但我现在可以告诉你,这就是你做错的地方——你传递给ReaderRdr的字符串(str)只是C#代码的字符串文字。你可以做一些非常棘手(非常不可取)的事情来模仿其他语言中的eval(),但在C#中没有内置的方法。对"(rdr.GetString(1).ToString().Trim())"所做的任何(明智的)操作都不会得到字符串,或将其强制转换为字符串,或修剪任何内容。
在ReaderRdr函数中,您所要完成的只是将string str
添加到List<string> reader
中。这不会起到任何作用,也与您从SqlDataReader
rdr中的数据库查询中获得的结果无关。如果您想存储实际从数据库中获得的数据,请使用rdr
,而不是(无用的)字符串参数str.
此外,我觉得你一定在代码中遗漏了一些内容——你正在用conn
作为第二个参数实例化SqlCommand cmd
,但我看不到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,但其他人可能更清楚。
实际上,您将传递给函数的String添加到读取器reader.Add(str);
。您从SQL I获得响应,即rdr
。
此项目将向您显示数据库中的内容:
Console.WriteLine(String.Format("{0}", rdr[0]));