我对使用数据库有疑问......
string node = Session["node"].ToString();
SqlConnection dataConnection = new SqlConnection();
dataConnection.ConnectionString = ConfigurationManager.ConnectionStrings["SumooHAgentDBConnectionString"].ConnectionString;
SqlCommand dataCommand = new SqlCommand();
dataCommand.Connection = dataConnection;
dataCommand.CommandText = ("Select * from xyz where @xyzID= xyzID AND PathType=0")
dataCommand.Parameters.AddWithValue("@xyzID", node);
dataConnection.Open();
dataCommand.ExecuteNonQuery();
dataConnection.Close();
现在表中有5列,应该返回5行。
然后我想在表或arraylist中添加这些值,以便我可以在以后的代码中使用这些值...
这样做的最佳方法是什么? 感谢
答案 0 :(得分:3)
而不是dataCommand.ExecuteNonQuery(),您需要:
SqlDataAdapter a = new SqlDataAdapter(dataCommand);
DataTable resultsTable = new DataTable();
a.Fill(resultsTable);
然后数据将出现在resultsTable对象中。
听起来你需要通常阅读ADO.NET ... DataTables涵盖here,网上有很多例子展示如何循环它们并获取数据,例如, here
答案 1 :(得分:3)
您可以将它们添加到DataTable
- 然后您将拥有一个包含5行的.Rows
属性,DataRow
属性中的每个.Rows
都有五列持有这些价值观。几乎像内存中的数据库。
为此,只需使用SqlDataAdapter
及其Fill
方法:
DataTable myTable = new DataTable();
SqlDataAdapter dap = new SqlDataAdapter(dataCommand);
dap.Fill(myTable);
或者您可以使用DataReader
读取行和值,然后将这些行和值转换为“whatever-it-is”类型的对象,并使用这五列调用该对象类型的构造函数将你生成的五个对象粘贴到List<WhateverItIs>
中,你基本上创建了自己的小ORM(对象关系映射器)。
这需要您使用SqlDataReader
并执行以下操作:
SqlDataReader dr = dataCommand.ExecuteReader();
List<Entity> _list = new List<Entity>();
while(dr.Read())
{
string column1 = dr.GetString(0);
...
string column5 = dr.GetString(4);
Entity newEntity = new Entity(column1, ......., column5);
_list.Add(newEntity);
}
无论什么最适合您 - DataTable在初始加载阶段的工作量较少,但稍后访问数据有点麻烦(MyDataTable.Rows[3].Column["ColunmName"].Value
或类似的东西) - “ORM”方法为您提供.NET CLR类型的好对象,您可以更轻松地使用它,但在加载数据时最初的工作更多。
马克
学习资源:
答案 2 :(得分:1)
您可能希望使用ExecuteReader
方法而不是ExecuteNonQuery
。
答案 3 :(得分:0)
您可以使用Microsoft模式和版本发布的Data Access Application Block。如果您不想执行所有低级别的ADO.NET管道工作,请执行此操作。