C# 如何使用SqlDataReader在结构数组中存储多个值
我想使用C# 如何使用SqlDataReader在结构数组中存储多个值,c#,arrays,sql-server,datareader,C#,Arrays,Sql Server,Datareader,我想使用SqlDataReader用我的SQL Server数据库中的数据填充用户数组 这是我目前的代码: public struct User { public int id; public string log; public string password; public User (int id1,string s, s2) { id=id1; log =s; password=s2; }
SqlDataReader
用我的SQL Server数据库中的数据填充用户数组
这是我目前的代码:
public struct User
{
public int id;
public string log;
public string password;
public User (int id1,string s, s2)
{
id=id1;
log =s;
password=s2;
}
}
User[] al = new User[50];
int i=0;
using (SqlConnection connection = new SqlConnection("string")
{
connection.Open();
SqlCommand command = new SqlCommand("Select [UserName], [Password]. from [TaUser]", connection);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// populate the al array with the datas from the 3 columns : ID, UserName, Password
}
}
connection.Close();
}
我知道,如果我有一个简单的arraylist,我可以只做
al.Add(“”
),但是,当涉及到结构数组时,我会遇到困难。我建议这样做:
SqlDataReader dataReader = cmd.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(dataReader);
string name = dataTable.Rows[0]["UserName"] as string;
然后像这样读取该数据表:
SqlDataReader dataReader = cmd.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(dataReader);
string name = dataTable.Rows[0]["UserName"] as string;
然后用收集的信息填充用户结构。工作完成了吗?您的代码中有很多错误 首先,您的用户构造函数无效,它应该是:
public User(int id1, string s, string s2)
其次,您的查询不返回用户id
第三,使用列表而不是数组可能更好
尽管如此,这应该是可行的
List<User> userList = new List<User>() ;
using (SqlConnection connection = new SqlConnection("string")
{
connection.Open();
SqlCommand command = new SqlCommand("Select [Id], [UserName], [Password]. from [TaUser]", connection);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var id = reader.GetInt32(0);
var userName = reader.GetString(1);
var pwd = reader.GetString(2);
var user = new User(id, userName, pwd);
userList.Add(user);
}
}
connection.Close();
// if you really need an array, do it here
var al = userList.ToArray()
List userList=newlist();
使用(SqlConnection=newsqlconnection(“字符串”)
{
connection.Open();
SqlCommand=newsqlcommand(“选择[Id]、[UserName]、[Password]。从[TaUser]”,连接);
使用(SqlDataReader=command.ExecuteReader())
{
while(reader.Read())
{
var id=reader.GetInt32(0);
var userName=reader.GetString(1);
var pwd=reader.GetString(2);
var user=新用户(id、用户名、pwd);
添加(用户);
}
}
connection.Close();
//如果您确实需要数组,请在此处执行
var al=userList.ToArray()
使用将其保存到列表中。添加,然后调用。ToArray()
要从列表中获取数组,您的结构没有与查询相同的字段。例如,结构中没有用户名
字段;而是有一个名为日志
的神秘字段。这是故意的吗?另外,您的查询返回两列,但是用户
的构造函数需要3个参数。发生了什么在这里?@JohnWu在不同的域中有不同的属性名并不少见,我建议您使用只读属性使其不可变,因为可禁用的结构会给您带来很多麻烦。最好将其作为一个类,因为作为一个结构,它在一开始并没有真正意义。@dan如果它们不同,则可以,但OP需要指定映射,特别是当属性多于列时。