0

わかりましたので、Visual Studio の C# (2012) と Access の間の接続を作成しました。つまり、手動で(コードなしで)実行しました。ただし、この方法は、私がやりたいことを正確に行うのに役立つわけではないため、コーディング方法も行いました。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using System.Xml.Serialization;

namespace WindowsFormsApplication1
{
public partial class horaireForm : Form
{
    DateTime semSess;
    int numSemaine;

    int jourSem;
    int periode;
    string theoOuLabo;

    string lesCours;
    string cours;

    string lesProfs;
    string unprof;

    string lesLocaux;
    string lesGroupes;
    string laComm;

    string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Stanley\\Desktop\\stuff\\Hiver 2013\\Horaires_EcranA2013.accdb";

(長くてすみません)。とにかく、この後、コンボボックスから情報を取得するこのコードがあります (各ケースは、大学の学期の週の日付です)。コンボボックスの値の場合は主キーを選択できないようですので、コンボボックスで選択する値として日付を使用し、それを使用してデータベースの実際の主キーを選択することにしました。

semSess = Convert.ToDateTime(comboSemSess.Text);
        OleDbConnection laConn = new OleDbConnection(conn);

        try
        {
            laConn.Open();

            laComm = "SELECT NumeroSemaine FROM SemainDelaSession WHERE DebutSemaine = " + semSess;

            OleDbCommand myAccessCommand = new OleDbCommand(laComm, laConn);

            OleDbDataReader reader = myAccessCommand.ExecuteReader();

            while (reader.Read())
            {
                numSemaine = Convert.ToInt32(reader["NumeroSemaine"]);
            }
        }

        catch
        {
            MessageBox.Show("Une erreur s'est produite en accédant à la base de données");
        }

        finally
        {
            laConn.Close();
        }

しかし、まだ接続できません。それはまだ MessageBox を取得します。その前に別の接続を行ったという事実と関係があるのでしょうか、それとも接続文字列を入力した方法と関係があるのでしょうか。

4

1 に答える 1

0

いくつかの問題が見られます...While (reader.Read())ブロックでは、numSemaine毎回上書きしているため、データリーダーで最後の結果しか取得できません。また、SELECT ステートメントの日付は引用符で囲む必要があり (SQL の文字列のように扱います)、実際には連結ではなくパラメーター化する必要があります (コンボ ボックスから SQL インジェクトするのは難しいですが、不可能ではなく、とにかく良い習慣です)。また、パスは、2 つで\はなく、ディレクトリ間に 1 つだけ必要です。

于 2013-11-10T06:58:43.210 に答える