Помощь с командами SQL - PullRequest
       2

Помощь с командами SQL

0 голосов
/ 15 октября 2018

Я пытаюсь создать простую форму, которая соединяется с моей базой данных SQL и выполняет запрос выбора SQL.

Если я использую простой запрос типа «выбрать * из пользователей», то таблица данных заполняется, и данные присутствуют.Мой запрос намного сложнее и, похоже, не работает.Я получаю много синтаксических ошибок и «команда sql не содержит конструктора, который принимает 31 аргумент».Я уверен, что делаю что-то невероятное неправильно.

SQL Query - Работает в SQL Management Studio.

SELECT sdk.EventsEx.EventTime AS 'Date/Time',
       sdk.UsersEx.Field14_50 AS 'Personnel Number',
CONCAT(sdk.EventsEx.Surname, ', ', sdk.EventsEx.FirstName) as 'User',
             sdk.EventsEx.CardNumber AS 'Token Number',
             sdk.EventsEx.PeripheralName AS 'Where',
             sdk.EventsEx.EventTypeDescription AS 'Event',
CONCAT(sdk.EventsEx.EventSubTypeDescription, ' ', sdk.EventsEx.EventDetails) as 'Details'

FROM         sdk.EventsEx INNER JOIN
             sdk.UsersEx ON sdk.EventsEx.UserID = sdk.UsersEx.UserID

WHERE(sdk.EventsEx.UserID > -1)
and Field14_50 = 'PN32701'

ORDER BY [Date/Time] DESC

Код C #

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void btnConnect_Click(object sender, EventArgs e)
    {
        try
        {
            using (DataTable dt = new DataTable("Users"))
            {
                using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))

                {
                    if (cn.State == ConnectionState.Closed)
                        cn.Open();
                    SqlCommand cmd = new SqlCommand

                        ("SELECT sdk.EventsEx.EventTime AS 'Date/Time',
                                 sdk.UsersEx.Field14_50 AS 'Personnel Number',
                    CONCAT(sdk.EventsEx.Surname, ', ', sdk.EventsEx.FirstName) as 'User',
                                 sdk.EventsEx.CardNumber AS 'Token Number',
                                 sdk.EventsEx.PeripheralName AS 'Where',
                                 sdk.EventsEx.EventTypeDescription AS 'Event',
                    CONCAT(sdk.EventsEx.EventSubTypeDescription, ' ', sdk.EventsEx.EventDetails) as 'Details'

                    FROM         sdk.EventsEx INNER JOIN
                                 sdk.UsersEx ON sdk.EventsEx.UserID = sdk.UsersEx.UserID

                    WHERE(sdk.EventsEx.UserID > -1)
                    and Field14_50 = 'PN32701'

                    ORDER BY[Date / Time] DESC", cn)

                    { CommandType = CommandType.Text };
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                    dataGridView1.DataSource = dt;
                }

            }
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Не строить (объединять строки), а помещать дословную строку : добавить @ перед " и вставить запрос в том виде, как он есть в вашей RDBMS-студии, в @"";:

// Verbatim string makes the query readable
string commandText = 
  @"SELECT sdk.EventsEx.EventTime AS 'Date/Time'
          ,sdk.UsersEx.Field14_50 AS 'Personnel Number'
          ,CONCAT(sdk.EventsEx.Surname, ', ', sdk.EventsEx.FirstName) AS 'User'
          ,sdk.EventsEx.CardNumber AS 'Token Number'
          ,sdk.EventsEx.PeripheralName AS 'Where'
          ,sdk.EventsEx.EventTypeDescription AS 'Event'
          ,CONCAT(sdk.EventsEx.EventSubTypeDescription, ' ', sdk.EventsEx.EventDetails) AS 'Details'
      FROM sdk.EventsEx INNER JOIN 
           sdk.UsersEx ON sdk.EventsEx.UserID = sdk.UsersEx.UserID
     WHERE (sdk.EventsEx.UserID > -1) 
       AND Field14_50 = 'PN32701'
  ORDER BY [Date/Time] DESC";

Тогда

using (SqlCommand cmd = new SqlCommand(commandText, cn)) {
  ... 
} 
0 голосов
/ 15 октября 2018

Попробуйте строку ниже.Обратите внимание на пространство перед ОТ, ГДЕ и ЗАКАЗАТЬ

            string commandText = "SELECT sdk.EventsEx.EventTime AS 'Date/Time'" +
                                 ", sdk.UsersEx.Field14_50 AS 'Personnel Number'" +
                                 ",CONCAT(sdk.EventsEx.Surname, ', ', sdk.EventsEx.FirstName) as 'User'" +
                                 ",sdk.EventsEx.CardNumber AS 'Token Number'" +
                                 ",sdk.EventsEx.PeripheralName AS 'Where'" +
                                 ",sdk.EventsEx.EventTypeDescription AS 'Event'" +
                                 ",CONCAT(sdk.EventsEx.EventSubTypeDescription, ' ', sdk.EventsEx.EventDetails) as 'Details'" +
                                 " FROM sdk.EventsEx INNER JOIN sdk.UsersEx ON sdk.EventsEx.UserID = sdk.UsersEx.UserID" +
                                 " WHERE(sdk.EventsEx.UserID > -1) and Field14_50 = 'PN32701'" +
                                 " ORDER BY [Date/Time] DESC";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...