Goran Bibic Ответов: 1

Составной идентификатор не может быть связан с#


private void prijavaAction()
       {
           if (textBox1.Text.All(char.IsDigit))

           {
               string selektujradnika = "SELECT ime_prezime  FROM radnici WHERE (bar_kod LIKE @FIND)";// pronaci radnika u bazi
               SqlCommand osobaId = new SqlCommand(selektujradnika);





               con = new SqlConnection(cs);
               con.Open();
               con.Close();


               {

                   con.Open();
                   osobaId = new SqlCommand(selektujradnika);
                   osobaId.Connection = con;


                   osobaId.Parameters.Add(new SqlParameter("@Find", System.Data.SqlDbType.VarChar, 50, "bar_kod")).Value = textBox1.Text;


                   osobaId.Parameters["@Find"].Value = textBox1.Text;
                   rdr = osobaId.ExecuteReader();
                   messageLabel.Text = " ";
                   readerresultTextbox.Text = " ";








                   if (rdr.Read())   //prijava radnika

                   {
                       notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFE11A");
                       messageLabel.Text = (rdr["ime_prezime"].ToString()) + "  je prijavljen u \n " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");
                       readerresultTextbox.Text = (rdr["ime_prezime"].ToString());

                       con.Close();

                       string selektujradnika2 = "SELECT ime_prezime  FROM radnici WHERE (bar_kod LIKE @Find)";
                       SqlCommand osobaId2 = new SqlCommand(selektujradnika2);
                       con.Open  ();

                       string provjeraprijavestring = "SELECT COUNT (*) FROM dbo.prijava_radnika WHERE radnik= " + osobaId + " and vrijemeodjave is null and status='prijavljen'";// pronaci radnika u bazi
                                                                                                                                                                                    //string provjeraprijavestring2 = "SELECT count(*) FROM dbo.prijava_radnika WHERE vrijemeodjave IS NULL and status = 'prijavljen'";// pronaci radnika u bazi
                       SqlCommand komandaprijave = new SqlCommand(provjeraprijavestring, con);

                       int userCount = (int)komandaprijave.ExecuteScalar();

                       if (userCount > 0)
                       {

                           ///////////////////////////////////
                           using (SqlConnection openCon3 = new SqlConnection(cs))
                           {


                               SqlCommand comm = new SqlCommand(cs);

                               comm.CommandText = "select max(brojprijavnice2) from dbo.prijava_radnika";
                               comm.Connection = openCon3;
                               openCon3.Open();
                               rdr = comm.ExecuteReader();
                               int max = 0;
                               while (rdr.Read())
                               {
                                   max = Convert.ToInt32(rdr[0].ToString());
                                   Console.WriteLine(max);

                               }
                               openCon3.Close();


                               String saveStaff = "UPDATE dbo.prijava_radnika SET vrijemeodjave=@vrijemeodjave, brojprijavnice2=" + (max + 1) + " WHERE radnik=" + osobaId;
                               using (SqlCommand querySaveStaff = new SqlCommand(saveStaff))
                               {
                                   querySaveStaff.Connection = openCon3;
                                   querySaveStaff.Parameters.Add("@vrijemeodjave", SqlDbType.DateTime).Value = DateTime.Now;

                                   openCon3.Open();
                                   querySaveStaff.ExecuteNonQuery();
                                   openCon3.Close();

                                 //  osobaId = new SqlCommand(selektujradnika);
                                 //  osobaId.Connection = con;




                                   notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#76AB01");
                                   messageLabel.Text = selektujradnika + " je odjavljen u\n" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");
                                   textBox1.Text = "";

                               }


                           }
                       }
                       else
                       {

                           string saveStaff = "INSERT into dbo.prijava_radnika (vrijemeprijave, radnik, status) VALUES(@vrijemeprijave,@radnik,'prijavljen')";
                           using (SqlCommand querySaveStaff = new SqlCommand(saveStaff))


                           {

                               querySaveStaff.Connection = con;
                               querySaveStaff.Parameters.Add("@vrijemeprijave", SqlDbType.DateTime).Value = DateTime.Now;
                               // querySaveStaff.Parameters.Add("@vrijemeodjave", SqlDbType.DateTime).Value = vrijemeodjaveDateTimePicker;
                               //querySaveStaff.Parameters.Add("@brojprijavnice", SqlDbType.VarChar, 255).Value = brojprijavnice2TextBox.Text;
                               querySaveStaff.Parameters.Add("@radnik", SqlDbType.VarChar, 255).Value = readerresultTextbox.Text;
                               // querySaveStaff.Parameters.Add("@id_fakture", SqlDbType.Int).Value = id_fakture;

                               con.Open();
                               querySaveStaff.ExecuteNonQuery();
                               con.Close();
                               osobaId = new SqlCommand(selektujradnika);
                               osobaId.Connection = con;
                           }

                       }

                       con.Close();
                   }




                   else
                   {
                       notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD7400");
                       messageLabel.Text = "Ne postoji radnik sa ovim bar kodom";
                       textBox1.Text = "";


                   }
               }
           }
           else
           {
               notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD7400");
               messageLabel.Text = "Bar kod nije važeći ili nije bar kod";
               textBox1.Text = "";


           }




       }


Что я уже пробовал:

Многосоставный индентификатор, в чем проблема?

1 Ответов

Рейтинг:
6

OriginalGriff

Это SQL жалуется, что имя какой-то таблицы или столбца не существует.
Сделать две вещи:
1) Используйте отладчик, чтобы выяснить, какой оператор SQL выдает ошибку.
2) Внимательно посмотрите на сообщение об ошибке, которое обычно сообщает вам имя элемента, который он не может найти:

The multi-part identifier "blah.blah" could not be bound.
Затем внимательно посмотрите на SQL, который вы обнаружили, - скорее всего, вы неправильно написали имя.

Цитата:
Отладка без ошибок. При запуске приложения и тестовой ошибке: ,,многосоставный идентификатор "System.Data.SqlClient.SqlCommand" не может быть привязан.,,


А теперь взгляните на свой код:
SqlCommand osobaId = new SqlCommand(selektujradnika);
...
string provjeraprijavestring = "SELECT COUNT (*) FROM dbo.prijava_radnika WHERE radnik= " + osobaId + " and vrijemeodjave is null and status='prijavljen'";
SqlCommand komandaprijave = new SqlCommand(provjeraprijavestring, con);
...
int userCount = (int)komandaprijave.ExecuteScalar();
Итак, вы объединяете строку для формирования команды SQL - что всегда является плохой идеей - и пытаетесь использовать объект SqlCommand в качестве значения для поиска?
Реализация ToString по умолчанию для объекта-это полное имя объекта, поэтому в этом случае ваша команда, переданная в SQL, становится:
SELECT COUNT (*) FROM dbo.prijava_radnika WHERE radnik= System.Data.SqlClient.SqlCommand and vrijemeodjave is null and status='prijavljen'
И SQL Server предполагает, что вы пытаетесь указать уникальный объект в ядре SQL.


Видите, насколько это помогает, когда вы даете все сообщение об ошибке?

И кстати: "Debug no errors" - это неправильно: компиляция-это не отладка. Отладка-это процесс просмотра приложения во время его работы и сбора информации о том, что оно делает. Если бы вы запустили этот код в отладчике, он бы сказал вам, что проблема treh была на линии
int userCount = (int)komandaprijave.ExecuteScalar();
и вы могли бы посмотреть на командную строку напрямую и увидеть проблему - даже исправить ее и попробовать снова!


Goran Bibic

Отладка без ошибок. При запуске приложения и тестовой ошибке: ,,многосоставный идентификатор "System.Data.SqlClient.SqlCommand" не может быть привязан.,,

OriginalGriff

Ответ обновлен.

Goran Bibic

Sql оператор в порядке при тестировании в sql запросе

Goran Bibic

И что теперь?

OriginalGriff

Откуда мне знать? Я понятия не имею, что именно вы пытаетесь сделать, когда объединяете объект SqlCommand и SqlCommand в строку! :смеяться:

Вы тот, кто написал код, что вы ожидали, что произойдет?

Goran Bibic

Я использую имя из sql таблицы dbo.radnici с текстовым полем типа bar_code....и если у этого работника в базе данных я должен выйти из него, если у него нет входа в таблицу dbo.prijava_radnika...это свидетельство рабочего времени работников