将DataTable转换为字符串类型

时间:2010-12-08 10:54:29

标签: c# string stringwriter system.data.datatable

我有这样的功能

       public DataTable GetAllPrimaryKeyTables(string localServer, string userName, string password, string selectedDatabase)
            {

                // Create the datatable 
                DataTable dtListOfPrimaryKeyTables = new DataTable("tableNames");

                SqlConnectionStringBuilder objConnectionString = new SqlConnectionStringBuilder();
                objConnectionString.DataSource = localServer; ;
                objConnectionString.UserID = userName;
                objConnectionString.Password = password;
                objConnectionString.InitialCatalog = selectedDatabase;

                // Query to select primary key tables.
                string selectPrimaryKeyTables = @"SELECT 
                                                       TABLE_NAME
                                                      AS
                                                       TABLES
                                                    FROM 
                                                       INFORMATION_SCHEMA.TABLE_CONSTRAINTS
                                                   WHERE 
                                                       CONSTRAINT_TYPE = 'PRIMARY KEY'
                                                     AND
                                                       TABLE_NAME <> 'dtProperties'
                                                ORDER BY
                                                       TABLE_NAME";

                // put your SqlConnection and SqlCommand into using blocks! 
                using(SqlConnection sConnection = new SqlConnection(objConnectionString.ConnectionString))
                using(SqlCommand sCommand = new SqlCommand(selectPrimaryKeyTables, sConnection))
                {
                    try
                    {
                        // Create the dataadapter object 
                        SqlDataAdapter sDataAdapter = new SqlDataAdapter(selectPrimaryKeyTables, sConnection);

                        // Fill the datatable - no need to open the connection, the SqlDataAdapter will do that all by itself  
                        // (and also close it again after it is done) 
                        sDataAdapter.Fill(dtListOfPrimaryKeyTables);
                    }
                    catch(Exception ex)
                    {
                        //All the exceptions are handled and written in the EventLog. 
                        EventLog log = new EventLog("Application");
                        log.Source = "MFDBAnalyser";
                        log.WriteEntry(ex.Message);
                    }
                }

                // return the data table to the caller 
                return dtListOfPrimaryKeyTables;



            }

然后我想把返回类型作为字符串而不是DataTable,所以我做了这个..

  public string GetAllPrimaryKeyTables(string ConnectionString)
        {
            string result = string.Empty;

            // Query to select primary key tables.
            string selectPrimaryKeyTables = @"SELECT 
                                                   TABLE_NAME
                                                  AS
                                                   TABLES
                                                FROM 
                                                   INFORMATION_SCHEMA.TABLE_CONSTRAINTS
                                               WHERE 
                                                   CONSTRAINT_TYPE = 'PRIMARY KEY'
                                                 AND
                                                   TABLE_NAME <> 'dtProperties'
                                            ORDER BY
                                                   TABLE_NAME";

            // put your SqlConnection and SqlCommand into using blocks! 
            using(SqlConnection sConnection = new SqlConnection(ConnectionString))
            using(SqlCommand sCommand = new SqlCommand(selectPrimaryKeyTables, sConnection))
            {
                try
                {
                    // Create the dataadapter object 
                    SqlDataAdapter sDataAdapter = new SqlDataAdapter(selectPrimaryKeyTables, sConnection);
                    DataTable dtListOfPrimaryKeyTables = new DataTable("tableNames");

                    // Fill the datatable - no need to open the connection, the SqlDataAdapter will do that all by itself  
                    // (and also close it again after it is done) 
                    sDataAdapter.Fill(dtListOfPrimaryKeyTables);
                    using(StringWriter sw = new StringWriter())
                    {
                        dtListOfPrimaryKeyTables.WriteXml(sw);
                        result = sw.ToString();
                    }
                }
                catch(Exception ex)
                {
                    //All the exceptions are handled and written in the EventLog. 
                    EventLog log = new EventLog("Application");
                    log.Source = "MFDBAnalyser";
                    log.WriteEntry(ex.Message);
                }
            }

            // return the data table to the caller 
            return result;
        }

但这不会返回它应该的字符串......

你能指导我做一些需要修改的事吗。

2 个答案:

答案 0 :(得分:0)

使用StringWriter,而不是StringBuilder,您可以使用WriteWriteLine方法。

答案 1 :(得分:0)

如果你想要一个以逗号分隔的列表,你可以使用类似下面的内容。

private string GetList(ds)
{
    var result = string.Empty;
    for(int i = 0; i < ds.Rows.Count; i++)
    {
         result += ds.Row[i][0] + ",";
    }
    result = result.Trim(',');
    return result;
}

希望这有帮助。