C# 错误无法从';对象';至';字符串';动态填充asp:DropDownList时

C# 错误无法从';对象';至';字符串';动态填充asp:DropDownList时,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,我试图用sql中的数据填充我的droplist,但当我尝试添加列表项时,标题中出现了错误 SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName] FROM [Roles] RLS

我试图用sql中的数据填充我的droplist,但当我尝试添加列表项时,标题中出现了错误

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], 
    URS.UserID [UserID], 
    USRS.UserName[UserName], 
    USRS.FirstName[FirstName], 
    USRS.LastName[LastName]
  FROM [Roles] RLS 
  Inner JOIN [Users] USRS 
  LEFT JOIN [UserRoles] URS ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID]                                     
  WHERE RLS.[RoleName] = 'Blog Editors'",conn);


conn.Open();
using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow row in dt.Rows)
        {
            ddlCreatedBy.Items.Add(new ListItem(row["newUserName"], row["numUserId"]));
        }
    }
}

请用户
转换.ToString

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
                                                FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
                                                ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
                                                WHERE RLS.[RoleName] = 'Blog Editors'",conn);
                conn.Open();
                using (SqlDataReader reader1 = cmd.ExecuteReader())
                {
                    while (reader1.Read())
                    {
                        int numUserID = reader1.GetInt32(1);
                        string strFirstName = reader1.GetString(3);
                        string strLastName = reader1.GetString(4);
                        string newUserName = strFirstName + " " + strLastName;

                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        foreach (DataRow row in dt.Rows)
                        {
                ddlCreatedBy.Items.Add(new ListItem(Convert.ToString(row["newUserName"]), Convert.ToString(row["numUserId"]));
                        }
                    }
或者调用
ToString()


请用户
转换.ToString

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
                                                FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
                                                ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
                                                WHERE RLS.[RoleName] = 'Blog Editors'",conn);
                conn.Open();
                using (SqlDataReader reader1 = cmd.ExecuteReader())
                {
                    while (reader1.Read())
                    {
                        int numUserID = reader1.GetInt32(1);
                        string strFirstName = reader1.GetString(3);
                        string strLastName = reader1.GetString(4);
                        string newUserName = strFirstName + " " + strLastName;

                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        foreach (DataRow row in dt.Rows)
                        {
                ddlCreatedBy.Items.Add(new ListItem(Convert.ToString(row["newUserName"]), Convert.ToString(row["numUserId"]));
                        }
                    }
或者调用
ToString()


请用户
转换.ToString

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
                                                FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
                                                ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
                                                WHERE RLS.[RoleName] = 'Blog Editors'",conn);
                conn.Open();
                using (SqlDataReader reader1 = cmd.ExecuteReader())
                {
                    while (reader1.Read())
                    {
                        int numUserID = reader1.GetInt32(1);
                        string strFirstName = reader1.GetString(3);
                        string strLastName = reader1.GetString(4);
                        string newUserName = strFirstName + " " + strLastName;

                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        foreach (DataRow row in dt.Rows)
                        {
                ddlCreatedBy.Items.Add(new ListItem(Convert.ToString(row["newUserName"]), Convert.ToString(row["numUserId"]));
                        }
                    }
或者调用
ToString()


请用户
转换.ToString

SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
                                                FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
                                                ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
                                                WHERE RLS.[RoleName] = 'Blog Editors'",conn);
                conn.Open();
                using (SqlDataReader reader1 = cmd.ExecuteReader())
                {
                    while (reader1.Read())
                    {
                        int numUserID = reader1.GetInt32(1);
                        string strFirstName = reader1.GetString(3);
                        string strLastName = reader1.GetString(4);
                        string newUserName = strFirstName + " " + strLastName;

                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataTable dt = new DataTable();
                        da.Fill(dt);
                        foreach (DataRow row in dt.Rows)
                        {
                ddlCreatedBy.Items.Add(new ListItem(Convert.ToString(row["newUserName"]), Convert.ToString(row["numUserId"]));
                        }
                    }
或者调用
ToString()

这样做

ddlCreatedBy.Items.Add(new ListItem(row["newUserName"].ToString(), row["numUserId"].ToString()));
这样做

ddlCreatedBy.Items.Add(new ListItem(row["newUserName"].ToString(), row["numUserId"].ToString()));
这样做

ddlCreatedBy.Items.Add(new ListItem(row["newUserName"].ToString(), row["numUserId"].ToString()));
这样做

ddlCreatedBy.Items.Add(new ListItem(row["newUserName"].ToString(), row["numUserId"].ToString()));

让我在这里简要分析一下您的代码:

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow row in dt.Rows)
        {
            ddlCreatedBy.Items.Add(new ListItem(row["newUserName"], row["numUserId"]));
        }
    }
}
您一条记录一条记录地从读卡器中读取数据,只是为了对每条记录反复执行相同的语句来填充数据集?这意味着,对于每一条记录,您都会用所有记录填充一个新的数据集——这是相当冗余的,不是吗

此外,SQL语句从不选择
newUserName
numUserId
列,因此不能访问表中任何一行中的任何一列

你真的不想做下面的事情吗?这将逐行读取用户数据,组合新用户名,然后在列表中创建一个新条目

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        ddlCreatedBy.Items.Add(new ListItem(newUserName, numUserId.ToString()));
    }
}

让我在这里简要分析一下您的代码:

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow row in dt.Rows)
        {
            ddlCreatedBy.Items.Add(new ListItem(row["newUserName"], row["numUserId"]));
        }
    }
}
您一条记录一条记录地从读卡器中读取数据,只是为了对每条记录反复执行相同的语句来填充数据集?这意味着,对于每一条记录,您都会用所有记录填充一个新的数据集——这是相当冗余的,不是吗

此外,SQL语句从不选择
newUserName
numUserId
列,因此不能访问表中任何一行中的任何一列

你真的不想做下面的事情吗?这将逐行读取用户数据,组合新用户名,然后在列表中创建一个新条目

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        ddlCreatedBy.Items.Add(new ListItem(newUserName, numUserId.ToString()));
    }
}

让我在这里简要分析一下您的代码:

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow row in dt.Rows)
        {
            ddlCreatedBy.Items.Add(new ListItem(row["newUserName"], row["numUserId"]));
        }
    }
}
您一条记录一条记录地从读卡器中读取数据,只是为了对每条记录反复执行相同的语句来填充数据集?这意味着,对于每一条记录,您都会用所有记录填充一个新的数据集——这是相当冗余的,不是吗

此外,SQL语句从不选择
newUserName
numUserId
列,因此不能访问表中任何一行中的任何一列

你真的不想做下面的事情吗?这将逐行读取用户数据,组合新用户名,然后在列表中创建一个新条目

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        ddlCreatedBy.Items.Add(new ListItem(newUserName, numUserId.ToString()));
    }
}

让我在这里简要分析一下您的代码:

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow row in dt.Rows)
        {
            ddlCreatedBy.Items.Add(new ListItem(row["newUserName"], row["numUserId"]));
        }
    }
}
您一条记录一条记录地从读卡器中读取数据,只是为了对每条记录反复执行相同的语句来填充数据集?这意味着,对于每一条记录,您都会用所有记录填充一个新的数据集——这是相当冗余的,不是吗

此外,SQL语句从不选择
newUserName
numUserId
列,因此不能访问表中任何一行中的任何一列

你真的不想做下面的事情吗?这将逐行读取用户数据,组合新用户名,然后在列表中创建一个新条目

using (SqlDataReader reader1 = cmd.ExecuteReader())
{
    while (reader1.Read())
    {
        int numUserID = reader1.GetInt32(1);
        string strFirstName = reader1.GetString(3);
        string strLastName = reader1.GetString(4);
        string newUserName = strFirstName + " " + strLastName;

        ddlCreatedBy.Items.Add(new ListItem(newUserName, numUserId.ToString()));
    }
}