Mukesh Pr@sad Ответов: 2

Исключение: недопустимое имя объекта (TableName).


Привет Экспертам..!

Я пытаюсь выполнить запрос с помощью ado.net, но я получаю исключение "недопустимое Имя объекта". Это исключение указывает на то, что таблица отсутствует в базе данных.
но пока я выполняю тот же запрос непосредственно в среду Sql Server management studio, он работает нормально. В моей строке подключения все записи верны, я проверил это несколько раз.
Ниже приведен код, который я использую:
SqlConnection thisConnection1 = new SqlConnection(SSR_CONN.ToString());
string word="";
string fstring = "select count(d.ID) as reccnt from [dbo].[V01_PR_RAILDOCS] d, [dbo].[V01_PG_RAILDOCS] s where s.ID=d.ID and d.ID > 104770 AND s.PRONO='ABKET'";

                thisConnection1.Open();
         try{
                using (SqlCommand com = new SqlCommand(fstring, thisConnection1))
                {

                    using (SqlDataReader reader = com.ExecuteReader())
                    {

                        while (reader.Read())
                        {

                            word = reader["reccnt"].ToString();

                            checkrec2 = Convert.ToDouble(word);

                        }
                    }
                }

                thisConnection1.Close();
            }
          catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


Примечание: Я перепробовал много способов решить эту проблему:
Имя схемы я сохранил правильно, как dbo.tablename, строка подключения правильна, она работает для других таблиц в той же базе данных.
Я, редактирование-&ГТ;технология IntelliSense-&ГТ;вес

В чем может быть проблема??
Пожалуйста, предложите мне...!
Спасибо

F-ES Sitecore

Вы пробовали сбросить [dbo]?

выберите количество(d.ID) как reccnt из [V01_PR_RAILDOCS] ...

[no name]

Вам действительно не нужна петля while здесь. Вы возвращаете одно значение и проверяете имя таблицы в той же базе данных, существует ли оно или нет. Точно так же и имя столбца, которое вы используете здесь, имеет собственное имя или нет.

Mukesh Pr@sad

Привет, сисир...Я заменил цикл while на условие If..и тот же запрос отлично работает непосредственно в management studio, так что нет никакого случая неправильного имени таблицы или столбца, а также та же строка подключения отлично работает для других таблиц.

Mukesh Pr@sad

Привет Ф-Эс..!
Вы имеете в виду, что я должен отбросить таблицу и воссоздать ее??
Он содержит много записей.

Awadhendra Tripathi

Его средство не уронить таблицу просто проверьте после удаления "dbo"

2 Ответов

Рейтинг:
2

OriginalGriff

Начните с просмотра ваших таблиц: есть ли у вас таблица под названием "V01_PR_RAILDOCS"? Затем убедитесь, что ваши таблицы содержат столбцы "ID" и "PRONO" - должен ли второй быть "PROMO"?

Я бы предположил, что, вероятно, вам нужно соединение, а не ссылаться на две таблицы в одном и том же SELECT:

string fstring = "SELECT COUNT(d.ID) AS reccnt FROM [dbo].[V01_PR_RAILDOCS] d JOIN [dbo].[V01_PG_RAILDOCS] s ON s.ID=d.ID WHERE d.ID > 104770 AND s.PRONO='ABKET'";

И почему ты зацикливаешься? Вы вернете только одну запись (так как это счетчик), поэтому ваш код должен отражать это с помощью if а не while


Mukesh Pr@sad

оба запроса возвращают одно и то же значение, когда я выполняю его непосредственно в среде sql server management studio.
но через программу же исключение я добираюсь до строки:-

использование (SqlDataReader reader = com.Метода executereader())

Все имена столбцов и таблиц указаны правильно.

Рейтинг:
1

Member 14619353

Я столкнулся с проблемой с помощью :
ODBC и SQL-Server-аутентификация в ODBC
и
FireDAC Для Подключения

Решение :
Мне пришлось установить Param MetaDefSchema на имя пользователя sqlserver :
FDConnection1.Параметры.AddPair('MetaDefSchema', self.FDConnection1.Параметры.имя пользователя);


В Википедия мурчит :
MetaDefSchema=имя схемы по умолчанию. Код времени проектирования >>исключает<< !! имя схемы из объекта SQL-Server-Authenticatoinname, если оно равно MetaDefSchema.

без настройки автоматический кодер создает :
dbname.username.tablename -> недопустимое имя объекта

С установкой MetaDefSchema в sqlserver-username :
dbname.tablename -> работает !

Смотрите также embarcadero-doc на сайте :
http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC для)


Надеюсь, это поможет кому-то еще..

с уважением, Лутц


Richard Deeming

Этот вопрос помечен как SQL Server 2012 и использует встроенный SqlClient занятия. Что заставляет тебя думать, управляющих участвовал?

Member 14619353

Я просто искал errormessage и добавил свой комментарий в качестве подсказки для кого-то с такой же проблемой, чтобы иметь шанс найти решение. Мы все благодарны за кучу возможных решений, не так ли ? В любом случае мне очень жаль, если это слишком от.