Я пытаюсь получить данные из базы данных доступа в считыватель данных. Проблема, однако, в том, что когда я использую переменную в запросе
мой код работает отлично, но когда я использую команду. Параметры я получаю сообщение об ошибке. Что я делаю не так, я искал несколько недель ...
"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 для второго