Преобразование DataTable в строковый тип - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть такая функция

       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 голосов
/ 08 декабря 2010

Если вы хотите разделить запятыми список, вы можете использовать что-то вроде ниже.

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

Надеюсь, это поможет.

0 голосов
/ 08 декабря 2010

Вместо StringWriter используйте StringBuilder, тогда вы можете использовать методы Write и WriteLine.

...