Asp.net SqlDataReader到字符串[]
为什么下面的代码不起作用Asp.net SqlDataReader到字符串[],asp.net,sql-server,Asp.net,Sql Server,为什么下面的代码不起作用 internal static string[] GetToolsForRole(string selectedRole) { string[] tempStr; ArrayList myAL = new ArrayList(); SqlCommand cmd = new SqlCommand("usp_TD_SelectByRoleName"); cmd.CommandType = CommandType.StoredProcedure; cmd
internal static string[] GetToolsForRole(string selectedRole) {
string[] tempStr;
ArrayList myAL = new ArrayList();
SqlCommand cmd = new SqlCommand("usp_TD_SelectByRoleName");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@role", SqlDbType.NVarChar, 50).Value = selectedRole;
SqlConnection myConnection = Util.GetConnection();
cmd.Connection = myConnection;
SqlDataReader reader = cmd.ExecuteReader();
int i = 0;
while (reader.Read()) {
tempStr[i] = reader["TD_Name"].ToString();
i++;
}
return tempStr;
}
数组不是这样工作的 您应该使用
列表
,并调用添加
方法
要使用数组,需要通过写入
tempStr=newstring[size]
来创建新数组。数组无法就地调整大小。您从不分配tempStr
在循环中尝试以下操作:
myAL.Add(reader["TD_Name"].ToString());
那么这就是回报
return (String[]) myAL.ToArray( typeof( string ) );
您不需要(删除)
i
和tempStr
变量。我改为List,但仍然得到“使用未分配的局部变量'tempStr'”@eyalb:您需要将新列表
放入变量中。只是想知道,为什么不使用ArrayList?当然列表是强类型的,但是只使用字符串不是很好吗?@Hogan:嗯?ArrayList如何更好地使用字符串?您应该始终使用List
@SLaks:我想它会稍微快一点,除非它实现得很奇怪。@Hogan:ArrayList永远不会比List
快。(我没有该语句的来源)@Slaks:我的理解是参数化类型是在运行时实例化的——这需要比只管理指针的预编译代码更多的时间和内存开销。我错过什么了吗?(我承认我们谈论的是相对较小的差异)。