Как я могу получить набор данных из запроса при отправке параметра в C #? - PullRequest
0 голосов
/ 12 января 2019

Я получаю исключение, которое не понимаю:

System.Data.SqlClient.SqlException: 'Неверный синтаксис рядом с' Clienti '.'

Это мой код, приводящий к ошибке:

string connectionString = @"Data Source=VONWOLFENSPC\MSSQLSERVER01;Initial Catalog=Gestionare_excursii_agentie_turism;Integrated Security=True";

SqlConnection sqlCon = new SqlConnection(connectionString: connectionString);

string selectsql = "Select G.Nume, G.Prenume, G.Telefon, G.NumarInsotitori, " +
                    "G.ClientID, G.Sex, " +
                    "(Select E.Nume From Excursii E where E.ExcursieID LIKE G.ExcursieID) AS Excursie" +
                    "From Clienti G Where G.CNP Like @cnp";

SqlCommand cmd = new SqlCommand(selectsql, sqlCon);
cmd.Parameters.AddWithValue("@cnp", comboBox2.Text);

try
{
    sqlCon.Open();

    // error happens on the next line
    using (SqlDataReader read = cmd.ExecuteReader())
    {
        while(read.Read())
        {
             //...

        }
    }
}
finally
{
    sqlCon.Close();
}

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Проблема в том, что вы просто пробелы. Если вы попытаетесь перепроверить строку, вы заметите пропущенный пробел перед ОТ.

Также вам нужно использовать using

    string selectsql =  @"SELECT  
                            G.Nume
                        ,   G.Prenume
                        ,   G.Telefon
                        ,   G.NumarInsotitori
                        ,   G.ClientID
                        ,   G.Sex
                        ,   (SELECT E.Nume FROM Excursii E WHERE E.ExcursieID LIKE G.ExcursieID) AS Excursie
                        FROM 
                            Clienti G 
                        WHERE 
                            G.CNP LIKE @cnp";

    using(SqlConnection sqlCon = new SqlConnection(connectionString))
    using(SqlCommand cmd = new SqlCommand(selectsql, sqlCon) )
    using(SqlDataReader read = cmd.ExecuteReader())
    {
        cmd.Parameters.AddWithValue("@cnp", comboBox2.Text);        

        sqlCon.Open();

        while(read.Read())
        {
            textBox1.Text = (read["Nume"].ToString());
            textBox2.Text = (read["Prenume"].ToString());
            textBox3.Text = (read["Telefon"].ToString());
            textBox4.Text = (read["NumarInsotitori"].ToString());
            textBox5.Text = (read["ClientID"].ToString());
            comboBox1.Text = (read["Excursie"].ToString());
            string sex = (read["Sex"].ToString());
            if (sex == "M")
            {
                checkBox1.Checked = true;
                checkBox2.Checked = false;
            }
            else
            {
                checkBox2.Checked = true;
                checkBox1.Checked = false;
            }

        }
    }
0 голосов
/ 12 января 2019

Вместо конкатенации запроса используйте многострочный строковый литерал:

    string selectsql = @"
Select  G.Nume, G.Prenume, G.Telefon, G.NumarInsotitori, G.ClientID, G.Sex, 
       (
         Select E.Nume 
         From Excursii E 
         where E.ExcursieID LIKE G.ExcursieID
        ) AS Excursie
From Clienti G 
Where G.CNP Like @cnp
";

Который вы можете вставить непосредственно в / из окна запроса SSMS для тестирования.

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