繁体   English   中英

如何从C#中的数据表返回字符串值?

[英]How to return a string value from datatable in c#?

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

System.Data.dll中发生类型'System.IndexOutOfRangeException'的异常,但未在用户代码中处理-return语句中的错误

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();
}

要回答您的问题,发生错误是因为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 Injection攻击

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注入攻击开放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM