C# datatable 读取数据库

<add name="EM" connectionString="server=.;database=form;pwd=sa;uid=sa"/>
Database db = null;
DataTable dtb = null;
string sql = "select class from table1 where name = '张三' ";
dtb = db.GetDataTable(db.form,sql);
打个比方 想要取得class的值 string class =
Database封装好的 不知道Datatable怎么操作读出来
我知道怎么写进去 加个DataRow drRow ;
drRow[0] = '';
可是怎么读出呢..

public SqlConnection getcon()
{
//连接本地数据库 server=localhost
string M_str_sqlcon = @"server=localhost;database=表名;Integrated Security=SSPI";
SqlConnection myCon = new SqlConnection(M_str_sqlcon);
return myCon;
}

/// <summary>
/// 创建一个DataTable对象
/// </summary>
/// <param name="M_str_sqlstr">SQL语句</param>
/// <param name="M_str_table">表名</param>
/// <returns>返回DataTable对象</returns>
DataTable mytable = new DataTable();
public DataTable gettable(string M_str_sqlstr)
{
SqlConnection sqlcon = this.getcon();
SqlDataAdapter sqlda = new SqlDataAdapter(M_str_sqlstr, sqlcon);

sqlda.Fill(mytable);
sqlcon.Close();
sqlcon.Dispose();
return mytable;
}
调用该方法:
DataTable mytable = gettable("select * from 表名")追问

说了 ,麻烦请帮忙看一下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-16
string test="";
string sql = "select class from table1 where name = '张三' ";
OleDbCommand cmd = new OleDbCommand(Sql, Connection);//第一个是SQL语句,Connection是链接字符串。当然你之前应该把它打开了。
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if(reader.Read())
{
test=reader["class"].ToString();
}
你可以测试下,备注我这里用的是ACCESS数据库的写法,如果你是SQL,自己改下就行。
把OleDb改成Sql的就可以了。追问

这样读的是几行呢

追答

因为你这里"select class from table1 where name = '张三' ";就写了一列啊,我这里就读取一列了。
如果要全部读取就这样写:
if(reader.HasRow)
{
while(reader.read())
{
test=reader["class"].ToString();
test2=reader["列名"].ToString();
//下面继续写,一直把你所有的列都读取出来为止
}
}

追问

我的意思是 class可能是有几行记录集啊 比如张三在 1班、2班、3班都有
test = "1班2班3班"?

追答

我没写完不好意思哈哈。test就获取一列,循环获取的,然后最后添加到集合,将集合返回给绑定控件即可。下面是我的代码,你参考一下,把SQL语句改成你的,列名改成你的即可。
public static List GetAllActivity()
{
List lact = new List();//这里定义的强类型的泛型集合
string str = "select * from activity order by ID desc";
using (OleDbDataReader odr = DBHelper.GetReader(str))
{
if (odr.HasRows)
{
while (odr.Read())
{
activity act = new activity();//这里是我定义的实体类,来接受数据用的,该实体类的属性和表中列的属性相匹配。当然你写的话就应该改成你自己的实体类。
act.Address1 = odr["Address1"].ToString();
act.Address2 = odr["Address2"].ToString();
act.CareatData = odr["CareatData"].ToString();
act.Content = odr["Content"].ToString();
act.ID = Convert.ToInt32(odr["ID"].ToString());
act.IsView = Convert.ToInt32(odr["IsView"].ToString());
act.Shen = odr["Shen"].ToString();
act.Shi = odr["Shi"].ToString();
act.Tel = odr["Tel"].ToString();
act.UserName = odr["UserName"].ToString();
lact.Add(act);//最后将每行数据都添加到集合。
}
}
return lact;
}
}
你还不明白我也没撤了。

第2个回答  2012-04-16
DataTable dtb = null;
string sql = "select class from table1 where name = '张三' ";
dtb = db.GetDataTable(db.form,sql);

string dtbStr=dtb.Rows[行下标][列下标].toString(); //两种写法,获得datatable中的某行某列的值
string dtbStr1=dtb.Rows[行下标]["列名"].toString();追问

谢谢 toString后还需要Trim吗
哪里找Datatable的用法啊 自己搜的不对

追答

Trim()方法只是去掉空格,加不加要看数据是否存在空格
关于Datatable的方法,网上太多了
大多很写的很繁琐
这个东西要自己积累了

本回答被提问者采纳
第3个回答  2012-04-16
dtb.Rows[0]["class"]就可以取出class的值了
第4个回答  2012-04-14
using System.Data.SqlClient;

public SqlConnection con = new SqlConnection("Data Source=SUIBIAN\\SQLEXPRESS;Initial Catalog=MySchool_new;Integrated Security=True");追问

说了 ,麻烦请帮忙看一下

相似回答