Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值从数据库导入表或其他更好的内容_C#_Asp.net_Sql Server 2005 - Fatal编程技术网

C# 将值从数据库导入表或其他更好的内容

C# 将值从数据库导入表或其他更好的内容,c#,asp.net,sql-server-2005,C#,Asp.net,Sql Server 2005,我有一个关于使用数据库的问题 string node = Session["node"].ToString(); SqlConnection dataConnection = new SqlConnection(); dataConnection.ConnectionString = ConfigurationManager.ConnectionStrings["SumooHAgentDBConnectionString"].ConnectionString; SqlCommand d

我有一个关于使用数据库的问题

 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中添加这些值,以便以后在代码中使用这些值

这样做的最佳方式是什么????
感谢您取代dataCommand.ExecuteOnQuery(),您需要:

SqlDataAdapter a = new SqlDataAdapter(dataCommand);
DataTable resultsTable = new DataTable();
a.Fill(resultsTable);
然后,数据将位于resultsTable对象中


听起来您一般需要在ADO.NET上阅读。。。DataTables已被介绍,web上有许多示例显示了如何循环使用它们并获取数据,例如。

您可以将它们添加到
DataTable
-然后您将有一个
.Rows
属性,其中包含5行,
.Rows
属性中的每个
DataRow
都有五列保存这些值。就像内存中的数据库一样

为此,只需使用
SqlDataAdapter
及其
Fill
方法:

DataTable myTable = new DataTable();
SqlDataAdapter dap = new SqlDataAdapter(dataCommand);
dap.Fill(myTable);
或者,您可以使用
DataReader
读取行和值,然后将它们转换为类型为“任意”的对象,并使用这五列值调用该对象类型上的构造函数,然后将生成的五个对象粘贴到
列表中
,您基本上创建了自己的小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);
}
SqlDataReader dr=dataCommand.ExecuteReader();
列表_List=新列表();
while(dr.Read())
{ 
string column1=dr.GetString(0);
...
string column5=dr.GetString(4);
实体newEntity=新实体(第1列,…,第5列);
_列表。添加(新实体);
}
任何最适合您的方式—DataTable在初始加载阶段的工作量较小,但以后访问数据会有点麻烦(
MyDataTable.Rows[3].Column[“ColunmName”].Value
或类似的方式)-“ORM”这种方法为您提供了一个很好的.NETCLR类型的对象,您可以更容易地使用它,但在加载数据时最初需要做更多的工作

马克

学习资源:


您可能希望使用该方法而不是
ExecuteOnQuery
如果您不想做所有低级ADO.NET管道工作,您可以使用Microsoft Patterns&Practices发布的方法。

我只是有一个疑问:dataCommand.Parameters.AddWithValue(@xyzID),node);这是正确的还是会出现错误??此命令的用途是将存储在节点中的值提供给查询中的xyzID……有更好的方法吗??使用AddWithValues()的方法对我来说似乎是正确的。找出它是否出错的最好方法是实际尝试并运行它!这很好…但我不太擅长ado.net…有没有一个地方可以让我阅读如何在数据表中添加值…或者你能给我举个例子…uv非常有帮助…谢谢