SQL Server 2005バックエンドを備えた古典的なASP Webサイトを保守しています。小さな機能のために、挿入を行うストアドプロシージャを作成しました。これは、データベース。
コードからストアドプロシージャを呼び出そうとすると、次のエラーが表示されます。
Microsoft OLE SQL Server for DB Provider error '80040e14' ストアドプロシージャ 'InsertGroup'が見つかりませんでした。 /newGroup.asp、行84
DBはSQL Server認証を使用します。接続文字列と同じuser/pwを使用してVisual StudioのDBサーバーに接続すると、ストアドプロシージャは表示されませんが、すべてのテーブルが表示されます。
ユーザーには、データリーダーとデータライターの役割があり、ストアドプロシージャの明示的な実行権限があります。
私は何が欠けていますか?
更新:申し訳ありませんが、サーバー管理者は、実際には2005サーバー(Windows Server 2003 x64で実行)であるのに、2000サーバーであると誤解しました。
恥の散歩:
接続文字列はライブデータベースを指しています。エラーメッセージは完全に正確でした。ストアドプロシージャはdev DBにのみ存在していました。すばらしい答えを提供してくれたすべての人に感謝します。そして、あなたの時間を無駄にしたことに対する私の謝罪。
ストアドプロシージャの実際の所有者を確認する必要がある場合があります。特定の別のユーザーである場合は、アクセスできない理由です。
これは、パラメータを使用して呼び出されるストアドプロシージャがある場合にも発生することがあります。たとえば、次のように入力した場合:
set @runProc = 'dbo.StoredProcedure'
exec @runProc
これは動作しますが、しかし:
set @runProc = 'dbo.StoredProcedure ''foods'''
exec @runProc
これにより、「ストアドプロシージャdbo.StoredProcedure 'foods'が見つかりませんでした」というエラーがスローされますが、これはparanthesesで簡単に克服できます。
set @runProc = 'exec dbo.StoredProcedure ''foods'''
exec (@runProc)
2つの原因があります。
1-ストアドプロシージャ名コードでストアプロシージャを宣言するときは、次のようにキーワードを実行したり実行したりしないでください。
C#
_string sqlstr="sp_getAllcustomers";// right way to declare it.
string sqlstr="execute sp_getAllCustomers";//wrong way and you will get that error message.
_
このコードから:
MSDBHelp.ExecuteNonQuery(sqlconexec, CommandType.StoredProcedure, sqlexec);
_CommandType.StoreProcedure
_はストアプロシージャ名のみを探し、ExecuteNonQuery
は舞台裏でストアプロシージャを実行します。
2-接続文字列:
別の原因は、間違った接続文字列です。接続文字列の中を見て、特にデータベース名などの接続があることを確認してください。
スキーマ名が接続文字列に含まれていることを確認しますか?
私が持っていた:
使用[wrong_place]
行く
前
宣言する..
チェックするもう一つの可能性。それは私に起こったばかりで言及されなかったため、ここにリストします;-)
名前の末尾に誤ってスペース文字を追加してしまった。やっと気づくまでに何時間も試しました。あなたがそれを理解した後、それは常に簡単なものです。
同じ問題がありました。最終的に私は理由を見つけました。 Webのコードを使用して、手順の出力をテストしました。最後にDrop(procedure)
への呼び出しがあったので、自分で削除しました。
ストアドプロシージャが見つかりませんでしたか?----これを取得したとき....このようなコード
String sp="{call GetUnitReferenceMap}";
stmt=conn.prepareCall(sp);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
currencyMap.put(rs.getString(1).trim(), rs.getString(2).trim());
4つのDB(sample1、sample2、sample3)がありますが、stmt
が検索する場所はmaster
デフォルトDBであり、例外が発生します。
dB名を指定して、問題が解決する場合::
String sp="{call sample1..GetUnitReferenceMap}";