如何在 c# 中从数据表返回字符串值

本文关键字:数据表 返回 字符串 | 更新日期: 2023-09-27 18:36:06

>我无法将数据表值存储在字符串中。如何返回数据表的字符串值?它在返回标量值时给出错误。

System.Data 中发生了类型为"System.IndexOutOfRangeException"的异常.dll但未在用户代码中处理 - 返回语句中的错误

txtSalespersonName.Text = dl.GetStringValue("select top 1 [ContactPerson]  from tbl_Companies where Company='" +companyname + "' order by id desc");
public string GetStringValue(string query)
{
    DataTable dt = new DataTable();
    try
    {
        string constr = ConfigurationManager.ConnectionStrings["KernelCS"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand(query))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    sda.Fill(dt);
                }
            }
        }
    }
    catch (Exception ex)
    {
      //  Response.Write(ex.Message);
    }
    return dt.Rows[1].ToString();
}

如何在 c# 中从数据表返回字符串值

为了回答您的问题,发生了错误,因为DataTable是基于零索引的,并且您的查询仅返回 1 个值,因此它超出了范围。 dt.Rows[0][0].ToString()将为您提供正确的输出。

但是由于您从查询中返回单个值,因此我建议您使用ExecuteScalar,如下所示:

string ContactPerson = String.Empty;
string constr = ConfigurationManager.ConnectionStrings["KernelCS"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand(query,con))
    {
        ContactPerson = cmd.ExecuteScalar().ToString();
    }
}
return ContactPerson;

此外,使用参数化查询来避免 SQL 注入攻击。

>dt.Rows[1]返回表中不存在的第二个DataRow,因为查询返回一行。您可以将其用作;

return dt.Rows[0][0].ToString();

但是,如果您只有一行,请不要使用 SqlDataAdapter。使用ExecuteScalar这正是它的用途

using (var con = new SqlConnection(constr))
using (var cmd = con.CreateCommand())
{
     cmd.CommandText = query;
     con.Open();
     return cmd.ExecuteScalar().ToString();               
}

顺便说一下,您应该始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。