Comment me connecter à une base de données et faire une boucle sur un jeu d'enregistrements en C #?

Quel est le moyen le plus simple de se connecter et d'interroger une base de données pour un ensemble d'enregistrements en C #?

0
ajouté édité
Vues: 7
Juste pour vérifier, le lien que vous cliquez dans le nav haut est en fait à un sous-web différent, pas à une vue d'une liste ou d'une bibliothèque dans le même site, correct? J'ai vu cela se produire lorsque des éléments dans le même site ont été ajoutés à la barre de navigation supérieure et cliqué, parce que vous êtes réellement dans le même site.
ajouté l'auteur Lori, source

10 Réponses

Donc j'ai compris cela et c'était assez trivial mais l'ignorance est un bonheur. Les liens à travers le haut nav ont été mis en place en tant que rubriques en fonction du contrôle de navigation de publication que j'ai consulté à partir de la section Paramètres du site/navigation. Une fois que j'ai modifié le paramètre pour afficher les sous-sites, le contrôle montrait désormais chaque site sur le nav principal en plus des en-têtes. J'ai supprimé les en-têtes et je suis parti avec les liens du site qui fonctionnaient bien et le CSS pour le lien actif fonctionnait bien. Cela me force maintenant à demander pourquoi j'utiliserais les en-têtes sur la navigation supérieure. Peut-être qu'il me manque quelque chose d'évident.

L'essentiel est que la publication des sites sur toute la courbe d'apprentissage pour les administrateurs provenant du portail de collaboration de base mis en place en utilisant la navigation WSS 3.

2
ajouté

Avez-vous modifié les attributs de vos contrôles de navigation arborescente ou de la source de données dans la page maître?

Si oui, quels sont vos paramètres?

Anders Rask

1
ajouté
Je n'ai rien changé avec les paramètres de la page principale pour le contrôle de navigation supérieur. Les paramètres sont définis par défaut pour autant que je sache.
ajouté l'auteur Jim McKeeth, source

@Goyuix - c'est excellent pour quelque chose écrit de la mémoire. testé ici - trouvé la connexion n'a pas été ouverte. Sinon très bien.

using System.Data.OleDb;
...

using (OleDbConnection conn = new OleDbConnection())
{
    conn.ConnectionString = "Provider=sqloledb;Data Source=yourServername\\yourInstance;Initial Catalog=databaseName;Integrated Security=SSPI;";

    using (OleDbCommand cmd = new OleDbCommand())
    {
        conn.Open();
        cmd.Connection = conn;
        cmd.CommandText = "Select * from yourTable";

        using (OleDbDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                Console.WriteLine(dr["columnName"]);
            }
        }
    }
}
0
ajouté

Quand on regarde le HTML, est-ce que les classes CSS sont assignées correctement? Ou le site parent est-il celui qui a eu le CSS topnavselected?

S'il s'agit d'un problème de css, votre feuille de style n'est peut-être pas correctement chargée sur ce sous-site. Dans le cas contraire, l'approbateur sitem ne détermine pas que le site que vous visitez actuellement correspond à l'élément situé dans la partie supérieure de la navigation. Les liens vers les sous-sites sont-ils automatiquement créés pour votre ou avez-vous mis le lien? Si vous avez tapé ou copié et collé le lien, vous devez vous assurer que SharePoint sait que vous faites référence à une URL interne. Parfois, vous devez modifier l'URL en supprimant les pages/default.aspx ou quelque chose de similaire.

0
ajouté
Oui, mais comment les sous-sites ont-ils été ajoutés? Est-ce que sharepoint l'a fait pour vous lorsque vous avez créé les sous-sites, ou l'avez-vous fait manuellement? Qu'en est-il du HTML? Avez-vous vérifié cela?
ajouté l'auteur Ray, source
La barre de navigation supérieure a été créée à l'origine avec la publication non activée. Il s'agissait uniquement d'un site de collaboration, de sorte que les sous-sites ne représentaient qu'une seule couche en tant que limite avec le fournisseur WSS. Les liens du site ont été créés via la page des paramètres du site de l'interface utilisateur et chaque site a hérité de la navigation du parent. Le thème est le même. Le style fait partie d'un thème personnalisé qui a été créé.
ajouté l'auteur Jim McKeeth, source

C'est certainement un bon moyen de le faire. Mais si vous utilisez une base de données qui supporte LINQ to SQL, cela peut être beaucoup plus amusant. Cela peut ressembler à ceci:

MyDB db = new MyDB("Data Source=...");
var q = from db.MyTable
        select c;
foreach (var c in q)
  Console.WriteLine(c.MyField.ToString());
0
ajouté

Très grossièrement et de mémoire puisque je n'ai pas de code sur ce portable:

using (OleDBConnection conn = new OleDbConnection())
{
  conn.ConnectionString = "Whatever connection string";

  using (OleDbCommand cmd = new OleDbCommand())
  {
    cmd.Connection = conn;
    cmd.CommandText = "Select * from CoolTable";

    using (OleDbDataReader dr = cmd.ExecuteReader())
    {
      while (dr.Read())
      {
        // do something like Console.WriteLine(dr["column name"] as String);
      }
    }
  }
}
0
ajouté

C'est une manière alternative (DataReader est plus rapide que celui-ci):

string s = "";
SqlConnection conn = new SqlConnection("Server=192.168.1.1;Database=master;Connect Timeout=30;User ID=foobar;Password=raboof;");
SqlDataAdapter da = new SqlDataAdapter("SELECT TOP 5 name, dbid FROM sysdatabases", conn);
DataTable dt = new DataTable();

da.Fill(dt);

for (int i = 0; i < dt.Rows.Count; i++)
{
    s += dt.Rows[i]["name"].ToString() + " -- " + dt.Rows[i]["dbid"].ToString() + "\n";
}

MessageBox.Show(s);
0
ajouté

Si vous interrogez une base de données SQL Server (versions 7 et supérieures), vous devez remplacer les classes OleDb par les classes correspondantes dans Espace de noms System.Data.SqlClient ( SqlConnection , SqlCommand et SqlDataReader ) car ces classes ont été optimisées pour fonctionner avec SQL Server.

Une autre chose à noter est que vous ne devriez jamais sélectionner tout cela car cela pourrait conduire à des résultats inattendus plus tard si vous ajoutez ou supprimez des colonnes à cette table.

0
ajouté

Si vous avez l'intention de lire un grand nombre de colonnes ou d'enregistrements, il vaut également la peine de mettre en cache les ordinaux et d'accéder aux méthodes fortement typées, par exemple.

using (DbDataReader dr = cmd.ExecuteReader()) {
  if (dr.Read()) {
    int idxColumnName = dr.GetOrdinal("columnName");
    int idxSomethingElse = dr.GetOrdinal("somethingElse");

    do {
      Console.WriteLine(dr.GetString(idxColumnName));
      Console.WriteLine(dr.GetInt32(idxSomethingElse));
    } while (dr.Read());
  }
}
0
ajouté

Je suppose que vous pouvez essayer le framework d'entité.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList courseList = ctx.GetCoursesByStudentId(1).ToList();
     //do something with courselist here
}
0
ajouté