C# 从SQL数据库获取数据并以字符串形式返回

C# 从SQL数据库获取数据并以字符串形式返回,c#,string,tostring,sqlconnection,C#,String,Tostring,Sqlconnection,需要帮助获取第一行记录并在while()之后以字符串形式返回循环中的记录。 一行中有很多列,我在将其声明为字符串st时遇到了问题?像通常的string st=new string()请帮助更正它 谢谢 public string Get_aodIdeal(string SubmittedBy) { String errMsg = ""; Guid? rguid = null; int isOnContract = 0; int isFreeMM = 0;

需要帮助获取第一行记录并在
while()之后以字符串形式返回
循环中的记录。 一行中有很多列,我在将其声明为字符串st时遇到了问题?像通常的
string st=new string()
请帮助更正它

谢谢

public string Get_aodIdeal(string SubmittedBy)
{
    String errMsg = "";
    Guid? rguid = null;
    int isOnContract = 0;
    int isFreeMM = 0;
    string _FileName;
    DateTime InstallDateTime = DateTime.Now;
    string FileDate = ToYYYYMMDD(DateTime.Now);
    errMsg = "Unknown Error.";

    SqlConnection conn = null; SqlCommand cmd = null;
    string st = null;

    conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["iDeal"].ConnectionString);
    cmd = new SqlCommand();
    string SQL = "select TOP 1 * from table1 Order by SubmittedOn desc";
    SqlDataAdapter sqd = new SqlDataAdapter(SQL, conn);
    cmd.CommandTimeout = 1200;
    conn.Open();
    SqlDataReader sqr;
    //sqd.SelectCommand.Parameters.Add("@Submitted", SqlDbType.Int).Value = PostID;
    sqr = sqd.SelectCommand.ExecuteReader();
    while (sqr.Read())
st = new string{
    rguid = cmd.Parameters["@rguid"].Value as Guid?,
                ridno = int.Parse(sqr["ridno"].ToString()),
                SubmittedOn= DateTime.Parse(sqr["SubmittedOn"].ToString()),
                SubmittingHost = sqr["SubmittingHost"].ToString(),
                ServiceAgreementNo = sqr["ServiceAgreementNo"].ToString(),
                DocumentID = sqr["DocumentID"].ToString(),
                Source = sqr["Source"].ToString(),
                FileName = sqr["FileName"].ToString(),
                FileType = sqr["FileType"].ToString(),
                FileDate = DateTime.Parse(sqr["FileDate"].ToString()),
                InstallTime = DateTime.Parse(sqr["InstallTime"].ToString()),
                CalenderCode = cmd.Parameters["CalenderCode"].Value as Guid,
                isFreeMM = bool.Parse(sqr["isFreeMM"].ToString()),
                isOnContract = bool.Parse(sqr["isOnContract"].ToString()),
                isProcessed = bool.Parse(sqr["isProcessed"].ToString()),
                ProcessedByFullName = sqr["ProcessedByFullName"].ToString(),
                isDelete = bool.Parse(sqr["isDelete"].ToString()),
                version = int.Parse(sqr["Version"].ToString()),
                LastUpdatedBy = DateTime.Parse(sqr["LastUpdatedBy"].ToString()),
                LastUpdatedOn = DateTime.Parse(sqr["LastUpdatedOn"].ToString()),
                shopGuid = sqr["shopGuid"].ToString(),
                MacID = sqr["MacID"].ToString(),
                MSISDN = sqr["MSISDN"].ToString()
}

为此,您可以使用StringBuilder,如下所示:

StringBuilder strBuilder= new StringBuilder(); 
while (sqr.Read())
{
    strBuilder.AppendFormat("PostID  : {0}{1}",sqr["PostID"].ToString(),Environment.NewLine);
    strBuilder.AppendFormat("dateposted  : {0}{1}",sqr["dateposted"].ToString(),Environment.NewLine);
    // And so on Build your string
}
最后,
strBuilder.ToString()
将为您提供所需的字符串。但更聪明的方法是创建一个具有必要属性的类和一个重写的.ToString方法来显示输出

AodIdeal
成为具有重写的
ToString()
方法的类。让我这样定义它:

public class AodIdeal
{
    public int PostID { get; set; }
    public string  dateposted { get; set; }
    public string Source { get; set; }
    // Rest of properties here

    public override string ToString()
    {
        StringBuilder ObjectStringBuilder = new StringBuilder();
        ObjectStringBuilder.AppendFormat("PostID  : {0}{1}", PostID, Environment.NewLine);
        ObjectStringBuilder.AppendFormat("dateposted  : {0}{1}",dateposted, Environment.NewLine);
        ObjectStringBuilder.AppendFormat("Source  : {0}{1}", Source, Environment.NewLine);

        // and so on
        return ObjectStringBuilder.ToString();
    }
}
然后可以创建类的对象(让它成为objAodIdeal),并将其属性用于局部变量。最后,
objAodIdeal.ToString()
将为您提供所需的输出

示例用法

AodIdeal objAodIdeal= new AodIdeal(); 
while (sqr.Read())
{
    objAodIdeal.PostID = int.Parse(sqr["PostID"].ToString());
    objAodIdeal.dateposted= sqr["dateposted"].ToString();
    // assign rest of properties
}
string requiredString= objAodIdeal.ToString();

为此,您可以使用StringBuilder,如下所示:

StringBuilder strBuilder= new StringBuilder(); 
while (sqr.Read())
{
    strBuilder.AppendFormat("PostID  : {0}{1}",sqr["PostID"].ToString(),Environment.NewLine);
    strBuilder.AppendFormat("dateposted  : {0}{1}",sqr["dateposted"].ToString(),Environment.NewLine);
    // And so on Build your string
}
最后,
strBuilder.ToString()
将为您提供所需的字符串。但更聪明的方法是创建一个具有必要属性的类和一个重写的.ToString方法来显示输出

AodIdeal
成为具有重写的
ToString()
方法的类。让我这样定义它:

public class AodIdeal
{
    public int PostID { get; set; }
    public string  dateposted { get; set; }
    public string Source { get; set; }
    // Rest of properties here

    public override string ToString()
    {
        StringBuilder ObjectStringBuilder = new StringBuilder();
        ObjectStringBuilder.AppendFormat("PostID  : {0}{1}", PostID, Environment.NewLine);
        ObjectStringBuilder.AppendFormat("dateposted  : {0}{1}",dateposted, Environment.NewLine);
        ObjectStringBuilder.AppendFormat("Source  : {0}{1}", Source, Environment.NewLine);

        // and so on
        return ObjectStringBuilder.ToString();
    }
}
然后可以创建类的对象(让它成为objAodIdeal),并将其属性用于局部变量。最后,
objAodIdeal.ToString()
将为您提供所需的输出

示例用法

AodIdeal objAodIdeal= new AodIdeal(); 
while (sqr.Read())
{
    objAodIdeal.PostID = int.Parse(sqr["PostID"].ToString());
    objAodIdeal.dateposted= sqr["dateposted"].ToString();
    // assign rest of properties
}
string requiredString= objAodIdeal.ToString();

如果有很多列,您希望从该方法返回哪一列,为什么不使用
ExecuteScalar
而不是
SqlDataReader
?@TimSchmelter我很容易混淆sql,还有很多方法,所以有什么建议吗?如何获取所有列并以字符串形式返回?如果使用dataadapter将数据填充到datatable中,我认为以字符串格式逐行获取数据非常容易。@xSea:创建一个具有许多属性的自定义类,如
string ServiceAgreementNo
bool isOnContract
LastUpdatedOn
。然后在
while
循环中初始化它(您也可以使用单个
sqr.Read()
,因为您知道只有一个)。然后返回这个自定义类而不是字符串。如果有很多列,你想从该方法返回哪一列,为什么不使用
ExecuteScalar
而不是
SqlDataReader
?@TimSchmelter我很容易混淆sql,还有很多方法,所以有什么建议吗?如何获取所有列并以字符串形式返回?如果使用dataadapter将数据填充到datatable中,我认为以字符串格式逐行获取数据非常容易。@xSea:创建一个具有许多属性的自定义类,如
string ServiceAgreementNo
bool isOnContract
LastUpdatedOn
。然后在
while
循环中初始化它(您也可以使用单个
sqr.Read()
,因为您知道只有一个)。然后返回这个自定义类而不是字符串。