使用 SqlDataReader 从 SQL Server 获取未知数据

本文关键字:未知 未知数 数据 获取 Server SqlDataReader SQL 使用 | 更新日期: 2023-09-27 17:55:14

我使用以下代码从SQL Server获取数据:

    string rootname = "[" + nameroot + "]";
    string retVal = "";
    string constring = "Data Source =(Local);Initial Catalog=Tajari;Integrated Security=True;";
    SqlConnection conobj = new SqlConnection(constring);
    string commandtext = "select distinct " + rootname + " from TBLJobsRootName where MenuId between 1 and " + countroot + "";
    SqlCommand comobj = new SqlCommand(commandtext, conobj);
    conobj.Open();
    SqlDataReader dr = comobj.ExecuteReader();
    while (dr.Read())
    {
        //retVal = dr[nameroot].ToString();
    }
    conobj.Close();

现在我需要将此数据插入到变量或文本框中。

问题是我的价值观是未知的

使用 SqlDataReader 从 SQL Server 获取未知数据

解决方案 1 :

您可以使用Index值。

试试这个:

while (dr.Read())
{
    retVal = dr[0].ToString();
}

解决方案 2 :

您还可以使用别名。

string commandtext = "select distinct " + rootname + " as myrootname from   
               TBLJobsRootName   where MenuId between 1 and " + countroot + "";
SqlCommand comobj = new SqlCommand(commandtext, conobj);
conobj.Open();
SqlDataReader dr = comobj.ExecuteReader();
while (dr.Read())
{
    retVal = dr["myrootname"].ToString();
}

建议:您的查询对SQL注入攻击开放,我建议您使用参数化查询来避免它们。

解决方案 3:使用参数化查询

如果要添加所有根名称值,则需要将所有值添加到列表中。

List<string> list = new List<string>();
string commandtext = "select distinct "+rootname+" as myrootname from   
               TBLJobsRootName   where MenuId between 1 and @countroot";
SqlCommand comobj = new SqlCommand(commandtext, conobj);
comobj.Parameters.AddWithValue("@countroot",countroot);
conobj.Open();
SqlDataReader dr = comobj.ExecuteReader();
while (dr.Read())
{
    lis.Add(dr["myrootname"].ToString());
}
//You can retunrn list