Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
Asp.net SqlDataReader到字符串[]_Asp.net_Sql Server - Fatal编程技术网

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:我的理解是参数化类型是在运行时实例化的——这需要比只管理指针的预编译代码更多的时间和内存开销。我错过什么了吗?(我承认我们谈论的是相对较小的差异)。