Ошибка неверного имени объекта при попытке выполнить хранимую процедуру? - PullRequest
3 голосов
/ 15 мая 2009

Не уверен, в чем дело, у меня есть хранимая процедура, названная точно как я вызываю, однако она всегда дает мне эту ошибку недопустимого объекта. Вот код подключения, ошибка выдается там со второй до последней строки.

SqlConnection cnstr = new SqlConnection(ConfigurationManager.ConnectionStrings["darconn"].ConnectionString);
SqlCommand sqlcmd = new SqlCommand();

sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Connection = cnstr;
sqlcmd.CommandText = "SetMapping";

String[] pullKodID = bundlelist.SelectedValue.ToString().Split(':');
int kod_id = System.Convert.ToInt32(pullKodID[0]);

sqlcmd.Parameters.Add("@kod_id", kod_id);
sqlcmd.Parameters.Add("@ell_id", courselist.Items[i].Text);
cnstr.Open();
sqlcmd.ExecuteNonQuery();
cnstr.Close();

Ответы [ 14 ]

5 голосов
/ 15 мая 2009

Скорее всего, хранимая процедура не видна вашему коду, потому что она была создана / принадлежит пользователю, отличному от dbo или пользователю, указанному в строке подключения.

Вы пытались добавить префикс имени хранимой процедуры к dbo? Например, "dbo.SetMapping".

В противном случае используйте Management Studio / Enterprise Manager, чтобы узнать, кому принадлежит хранимая процедура, и либо заново создайте ее как dbo, либо обновите код / ​​строку подключения, чтобы использовать соответствующего пользователя.

2 голосов
/ 18 января 2012

У меня была та же проблема, и оказалось, что я создал хранимую процедуру в базе данных [master] вместо той, над которой я должен был работать. Вероятно, не ваша проблема, но это что-то, чтобы принять к сведению.

1 голос
/ 15 мая 2009

Проверьте хранимую процедуру, чтобы узнать, принадлежит ли она 'dbo', поэтому имя будет 'dbo.SetMapping', а не что-то вроде 'SomeUser.SetMapping'

Я бы также явно указал 'dbo.' во имя

sqlcmd.CommandText = "dbo.SetMapping";
1 голос
/ 15 мая 2009

Проверьте правильность написания имен таблиц в хранимой процедуре.

При сохранении хранимой процедуры она проверяет имена полей в используемых таблицах, но можно сохранить хранимую процедуру, которая использует имя таблицы, которая не существует (или написана с ошибкой).

1 голос
/ 15 мая 2009

sql profiler показывает что-нибудь?

вы можете выполнить вне контекста приложения? от MGT Studio или анализатора Qry?

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

У меня также возникала одна и та же ошибка каждый раз, когда я пытался вставить определенные данные в таблицу SQL с помощью ADO.Net. Позже я обнаружил триггер в таблице, предотвращающий это, когда я попытался выполнить ту же команду на сервере SQL напрямую. Так что проверь это тоже.

0 голосов
/ 06 июня 2015

У меня похожая проблема. я забыл написать полный путь к моей фактической базе данных. поэтому вы должны написать select * From [ваше имя базы данных]. [dbo]. [имя объекта] в моем случае в был табличный объект в практической базе данных с именем Итак, выберите * из [практических]. [dbo]. [сотрудник] та же логика применима и к хранимым процедурам

0 голосов
/ 11 февраля 2014

У меня было неверное имя таблицы внутри процедуры, поэтому я и получил эту ошибку.

Пример: в процедуре есть таблица с именем test2 с полями из таблицы test. Это выглядело как:

insert into test2 (fields from test) values ...

0 голосов
/ 28 июня 2012

Сначала убедитесь, что ваши хранимые процедуры действительно работают за пределами .net. Если все работает нормально, подумайте о следующем ...

Эта ошибка может вводить в заблуждение, если объект, на который ссылаются, работает нормально, проверьте другие хранимые процедуры, которые вы используете на той же странице, на предмет недействительных ссылок на «объект»

Причина в том, что это может быть ссылка на ОШИБКУ SQL внутри полностью отдельной сломанной хранимой процедуры, которую вы запускаете на той же странице. Например, скажем, у вас есть хранимая процедура для получения содержимого таблицы; если вы по ошибке объедините таблицу с хранимой процедурой (а не с таблицей, на которую ссылалась хранимая процедура) в другой хранимой процедуре на той же странице, эта ошибка будет выдана. Что может сбивать с толку, поскольку вы знаете, что хранимая процедура, на которую ссылаются, работает просто отлично!

0 голосов
/ 08 декабря 2011

Несмотря на это, у меня была совершенно другая проблема в .NET 4, которая вызвала то же исключение, с небольшим количеством полезной информации для ее диагностики.

Я обновил несколько таблиц в моем DBML. Возможно, я перезагрузил хранимую процедуру, но я не помню, чтобы это делалось.

У меня осталась следующая обертка sproc в файле designer.cs:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetSomeInformation", IsComposable=true)]
public IQueryable<GetSomeInformationResult> GetSomeInformation([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="BigInt")] System.Nullable<long> infoId)
{
    return this.CreateMethodCallQuery<GetSomeInformationResult>(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), infoId);
}

CreateMethodCallQuery предназначен для вызова табличных функций, а не хранимых процедур. Я озадачен тем, почему это изменило бы это. Я вернул его для использования ExecuteMethodCall:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetSomeInformation")]
public ISingleResult<GetSomeInformationResult> GetSomeInformation([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="BigInt")] System.Nullable<long> infoId)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), infoId);
    return ((ISingleResult<GetSomeInformationResult>)(result.ReturnValue));
}

И все хорошо. Очень странно.

ОБНОВЛЕНИЕ: Это, вероятно, было вызвано тем, что Visual Studio решила, что хранимая процедура была табличной функцией, когда она была добавлена ​​в dbml. Я никогда не видел, чтобы это случилось раньше.

Флаг IsComposable, похоже, является единственным способом отличить хранимые процедуры от функций табличных значений. После того как я очистил флаг от узла Function в dbml, Visual Studio сгенерировал правильный код в файле конструктора.

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