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

但是,我仍然无法连接。它仍然得到消息框。这是否与我之前完成了另一个连接的事实有关,或者我输入connectionString的方式,因为我不知道。

4

1 回答 1

0

我可以看到一些问题...在While (reader.Read())块中,您numSemaine每次都在覆盖,因此您只能在数据读取器中获得最后一个结果。此外,SELECT 语句中的日期应该在其周围加上引号(将其视为 SQL 中的字符串),并且实际上它应该是参数化的而不是连接的(很难从组合框中进行 SQL 注入,但并非不可能,无论如何这是一个好习惯)。此外,路径只需要\目录之间的一个,而不是两个。

于 2013-11-10T06:58:43.210 回答