Несоответствие типов данных в выражении критериев, использование переменной в запросе работает - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь получить данные из базы данных доступа в считыватель данных. Проблема, однако, в том, что когда я использую переменную в запросе мой код работает отлично, но когда я использую команду. Параметры я получаю сообщение об ошибке. Что я делаю не так, я искал несколько недель ...

"SELECT functionaris.functionariscode, Count(functionaris_in_week.bsn) AS aantal FROM medewerker, functionaris, functionaris_in_week WHERE    medewerker.puikcode = functionaris.puikcode AND functionaris.functionariscode = functionaris_in_week.functionariscode AND functionaris_in_week.weeknummer = " + MainWindow.weeknummer + " AND functionaris.puikcode = @puikcode GROUP BY functionaris.functionariscode;"; 

Это прекрасно работает, но я не хочу рисковать внедрением SQL.

namespace Lopend_Bestand
{
    /// <summary>
    /// Interaction logic for DataPersoonlijkPage.xaml
    /// </summary>
    public partial class DataPersoonlijkPage : Page
    {
        // Pak het pad van het project
        public static string projectPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(Directory.GetCurrentDirectory()));
        // Zet een database connectionstring
        public static string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + projectPath + "\\app_data\\LB_DB.accdb";
        public DataPersoonlijkPage()
        {
            InitializeComponent();

            //SQL Query maken
            string query = "SELECT medewerker.voornaam, medewerker.tussenvoegsel, medewerker.achternaam FROM medewerker WHERE medewerker.puikcode = @puikcode";
            //Maak een connectie en command
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            using (OleDbCommand cmd = new OleDbCommand(query, connection))
            {
                //Geef de parameters in de query een value
                cmd.Parameters.Add("@puikcode", OleDbType.VarChar).Value = MainWindow.gebruiker;

                //Open de connectie
                connection.Open();

                //Voer de query uit en krijg de data in de reader
                OleDbDataReader mySqlDataReader = cmd.ExecuteReader(CommandBehavior.Default);

                //Ga door de reader en zet de waardes naar het formulier
                mySqlDataReader.Read();

                NaamLabel.Content = mySqlDataReader["voornaam"].ToString() + " " + mySqlDataReader["achternaam"].ToString();

                //Sluit de reader na gebruik
                mySqlDataReader.Close();

                //Sluit de database connectie
                connection.Close();
            }

            //SQL Query maken
            string query1 = "SELECT functionaris.functionariscode, Count(functionaris_in_week.bsn) AS aantal FROM medewerker, functionaris, functionaris_in_week WHERE medewerker.puikcode = functionaris.puikcode AND functionaris.functionariscode = functionaris_in_week.functionariscode AND functionaris_in_week.weeknummer = @weeknummer AND functionaris.puikcode = @puikcode GROUP BY functionaris.functionariscode;";
            //Maak een connectie en command
            using (OleDbConnection connection1 = new OleDbConnection(ConnectionString))
            using (OleDbCommand command = new OleDbCommand(query1, connection1))
            {
                //Geef de parameters in de query een value
                command.Parameters.Add("@puikcode", OleDbType.VarChar).Value = MainWindow.gebruiker;
                command.Parameters.Add("@weeknummer", OleDbType.Integer).Value = MainWindow.weeknummer;

                //Open de connectie
                connection1.Open();

                //Voer de query uit en krijg de data in de reader
                OleDbDataReader mySqlDataReader1 = command.ExecuteReader(CommandBehavior.Default);

                //Ga door de reader en zet de waardes naar het formulier
                mySqlDataReader1.Read();

                int CodeCount = 1;

                do
                {
                    Label FCodelabel = (Label)this.FindName("Functionariscode" + CodeCount + "Label");
                    Label ACodeLabel = (Label)this.FindName("Aantal" + CodeCount + "Label");
                    FCodelabel.Visibility = Visibility.Visible;
                    ACodeLabel.Visibility = Visibility.Visible;
                    FCodelabel.Content = mySqlDataReader1["functionariscode"].ToString();
                    ACodeLabel.Content = mySqlDataReader1["aantal"].ToString();
                    CodeCount++;
                } while (mySqlDataReader1.Read()); ;

                //Sluit de reader na gebruik
                mySqlDataReader1.Close();

                //Sluit de database connectie
                connection1.Close();
            }
        }
    }
}

MainWindow.weeknummer является целым числом MainWindow.gebruiker - это строка

Во время тестирования я использовал 47 для первого и str010 для второго

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...