2013-07-23 16 views
6

テーブルの名前を引数とするストアドプロシージャを作成し、データベースに存在する場合は1を返し、存在しない場合は0を返します。 。 SQL Server Management Studioのストアドプロシージャのテストは、私が望むのとまったく同じですが、C#プログラムで使用するためにその値を取得するのに問題があります。テーブルが存在する場合にブール値を返すSQL Serverストアドプロシージャ

私のオプションはExecuteScalar()ExecuteNonQuery()またはExecuteReader()と思われますが、いずれもタスクには適していないようですが、ストアードプロシージャの結果を取得することもできません。

cmd.Parameters.AddWithValuecmd.Parameters.Addの両方を使用してパラメータを割り当てなおしてみました。

+1

が結果を返すか、選択するストアドプロシージャです返す必要がありますか? 「return 1」の代わりに「TableExists = 1」を選択すると簡単です。その後、ExecuteScalar()を使用することができます。 –

+0

はい、返されます。物事をより簡単にするならば、SELECTを使って調べてみましょう。 – danbroooks

+2

いくつかのコードを投稿してください。 – Khan

答えて

15

あなたが値を取得するために、このC#コードを書くことができ、あなたが0(テーブルが存在しない)または1(テーブルが存在しない)のいずれかを選択し、このようなストアドプロシージャを有する

CREATE PROCEDURE dbo.DoesTableExist (@TableName NVARCHAR(100)) 
AS 
BEGIN 
    IF EXISTS (SELECT * FROM sys.tables WHERE Name = @TableName) 
     SELECT 1 
    ELSE 
     SELECT 0 
END 

を仮定 - 使用.ExecuteScalar()だけ単一行、単一列期待していることから:今すぐresult

// set up connection and command 
using (SqlConnection conn = new SqlConnection("your-connection-string-here")) 
using (SqlCommand cmd = new SqlCommand("dbo.DoesTableExist", conn)) 
{ 
    // define command to be stored procedure 
    cmd.CommandType = CommandType.StoredProcedure; 

    // add parameter 
    cmd.Parameters.Add("@TableName", SqlDbType.NVarChar, 100).Value = "your-table-name-here"; 

    // open connection, execute command, close connection 
    conn.Open(); 
    int result = (int)cmd.ExecuteScalar(); 
    conn.Close(); 
} 

をテーブルが存在しない場合0のいずれかが含まれています - それは存在しない場合、または1。この

+1

これはクリーナーです。戻り値と比較して –

+1

が良いですか? – Muflix

1

用途:

var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int); 
returnParameter.Direction = ParameterDirection.ReturnValue; 

は、あなたのストアドプロシージャは、0または1

関連する問題